Установлен ли параметр_пакеты_файла () в параметре timeout?

Я вызываю серию ссылок, используя метод file_get_contents() в цикле. Для обработки каждой ссылки может потребоваться более 15 минут. Теперь, я беспокоюсь о том, имеет ли PHP file_get_contents() период ожидания?

Если «да», он отключится с вызовом и перейдет к следующей ссылке. Я не хочу вызывать следующую ссылку без предварительной обработки.

Итак, скажите, пожалуйста, имеет ли file_get_contents() период ожидания. Файл, который содержит file_get_contents() , установлен в значение set_time_limit() равным нулю (неограниченно).

Тайм-аут по умолчанию определяется параметром default_socket_timeout , который составляет 60 секунд. Вы также можете изменить его на лету:

 ini_set('default_socket_timeout', 900); // 900 Seconds = 15 Minutes 

Другой способ установить тайм-аут – использовать stream_context_create для установки таймаута в качестве параметров HTTP-контекста используемой обертки HTTP-потока :

 $ctx = stream_context_create(array('http'=> array( 'timeout' => 1200, //1200 Seconds is 20 Minutes ) )); echo file_get_contents('http://example.com/', false, $ctx); 

Как упоминалось в @diyism, « default_socket_timeout, stream_set_timeout и stream_context_create timeout – это все тайм-аут каждой строки чтения / записи, а не весь тайм-аут соединения ». И главный ответ by @stewe мне не удалось.

В качестве альтернативы использованию file_get_contents вы всегда можете использовать curl с таймаутом.

Итак, вот рабочий код, который работает для вызова ссылок.

 $url='http://example.com/'; $ch=curl_init(); $timeout=5; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $result=curl_exec($ch); curl_close($ch); echo $result; 

Стоит отметить, что при изменении default_socket_timeout на лету может оказаться полезным восстановить его значение после вызова file_get_contents :

 $default_socket_timeout = ini_get('default_socket_timeout'); .... ini_set('default_socket_timeout', 10); file_get_contents($url); ... ini_set('default_socket_timeout', $default_socket_timeout); 

Для меня работает, когда я меняю свой php.ini на моем хосте:

 ; Default timeout for socket based streams (seconds) default_socket_timeout = 300