Я работаю с PHP для доступа к файлам и фотографиям с удаленных серверов. В основном я использую функции file_get_contents () и copy ().
Иногда доступ к маленькому текстовому файлу или фотографии почти мгновенен, но в других случаях кажется, что он «застрял» на минуту в том же точном файле. И иногда это фактически заставляет мой скрипт зависать, и даже когда я останавливаю скрипт, Apache остается заблокированным в течение нескольких минут.
Я вполне согласен с тем, что интернет-соединения могут быть неровными. Меня беспокоит, что я восстанавливаю изящно и что я не разбиваю Apache – функция PHP set_time_limit () возвращает только фатальную ошибку. Кроме того, в руководстве PHP есть заметка о том, что время, затрачиваемое на потоковые операции, не влияет на время работы скрипта.
Как я могу оправиться от таких проблем с подключением и позволить моему сценарию продолжить? И почему это должно заставлять Apache висеть?
Спасибо, Брайан
$options = array( 'http' => array( 'user_agent' => 'Firefox wannabe', 'max_redirects' => 1, 'timeout' => 10, ) ); $context = stream_context_create( $options ); $content = file_get_contents( $url, false, $context );
Взгляните на параметры stream_context_create
и HTTP . Вышеприведенный код установит тайм-аут в соединении и позволит переадресовать один.
Это должно препятствовать достижению таймаута.
Длинные задержки могут быть вызваны сетью или удаленным сервером, у которого брандмауэр запрещает вам захватывать слишком много файлов одновременно или сломанным DNS-сервером или маршрутизатором на пути к удаленному хосту. В качестве предложения вы должны кэшировать локально загруженные файлы, поэтому в следующих файлах обновления будут обрабатываться локально, а не в большой сети.