PHP – установка времени ожидания_файла_файла_файла

Я использую 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 ?

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

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

Ваш вопрос….

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

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

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

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

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