Я называю серию ссылок, используя file_get_contents()
метод в цикле. Обработка каждой ссылки может занять более 15 минут. Теперь я беспокоюсь о том, file_get_contents()
есть ли у PHP период ожидания?
Если да, время ожидания звонка истечет, и вы перейдете к следующей ссылке. Я не хочу называть следующую ссылку без предварительного завершения.
Итак, скажите, пожалуйста, file_get_contents()
есть ли период ожидания. Файл, который содержит значение file_get_contents()
, установлен set_time_limit()
на ноль (без ограничений).
php
timeout
file-get-contents
Флора Клинтон
источник
источник
Ответы:
Время ожидания по умолчанию определяется
default_socket_timeout
настройкой ini , которая составляет 60 секунд. Вы также можете изменить его на лету:Другой способ установить тайм - аут, будет использовать ,
stream_context_create
чтобы установить тайм - аут в качестве опции контекста HTTP в HTTP поток обертки в использовании:источник
Как упомянул @diyism, « default_socket_timeout, stream_set_timeout и stream_context_create timeout - это все тайм-аут каждой строки чтения / записи, а не весь тайм-аут соединения ». И главный ответ @stewe меня не сработал.
В качестве альтернативы использованию
file_get_contents
вы всегда можете использоватьcurl
с таймаутом.Итак, вот рабочий код, который работает для вызова ссылок.
источник
fsockopen
вместоcurl
): stackoverflow.com/a/3690321/1869825Да! Передавая контекст потока в третьем параметре:
Здесь с таймаутом 1 с :
Источник в разделе комментариев https://www.php.net/manual/en/function.file-get-contents.php
Параметры HTTP-контекста :
Другие контексты: https://www.php.net/manual/en/context.php
источник
stream_context_create
работает только для тайм-аута соединения. Если сервер отвечает (отправляет некоторые данные) в течение заданного времени ожидания, но отправляет оставшуюся полезную нагрузку вечно, этот тайм-аут не прерывает медленную передачу.Стоит отметить, что при изменении default_socket_timeout на лету может быть полезно восстановить его значение после вызова file_get_contents :
источник
Для меня работа, когда я меняю свой php.ini на моем хосте:
источник