PHP - установка тайм-аута file_get_contents

Я использую file_get_contents, чтобы получить заголовки внешней страницы, чтобы определить, находится ли внешняя страница в сети следующим образом:

$URL = "http://page.location/";
$Context = stream_context_create(array(
'http' => array(
    'method' => 'GET',
)
));
file_get_contents($URL, false, $Context);
$ResponseHeaders = $http_response_header;

$header = substr($ResponseHeaders[0], 9, 3);

if($header[0] == "5" || $header[0] == "4"){
//do stuff
}

Это работает хорошо, за исключением случаев, когда страница слишком долго реагирует.

Как установить тайм-аут?

Будет ли file_get_headers возвращать FALSE, если он еще не завершен, и перейдет ли PHP к следующей строке, если он не завершил запрос file_get_contents?

Ответ 1

Добавьте ключ timeout внутри stream_context_array

$Context = stream_context_create(array(
'http' => array(
    'method' => 'GET',
    'timeout' => 30, //<---- Here (That is in seconds)
)
));

Ваш вопрос....

будет ли файл_get_headers возвращать FALSE, если он еще не завершен, и PHP перейдет к следующей строке, если она не завершила file_get_contents запрос?

Да, он вернет FALSE вместе с приведенным ниже предупреждающим сообщением.

Не удалось выполнить попытку подключения, так как подключенная сторона не должным образом реагировать после определенного периода времени или установленного соединения не удалось, потому что подключенный хост не смог ответить.

Ответ 2

Вот пример того, как установить таймаут для этой функции:

<?php
$ctx = stream_context_create(array(
    'http' => array(
        'timeout' => 1
        )
    )
);
file_get_contents("http://example.com/", 0, $ctx);
?>