В настоящее время я использую file_get_contents () для представления, ПОЛУЧАЮТ данные к массиву сайтов, но после выполнения страницы я получаю эту ошибку:
Фатальная ошибка: Максимальное время выполнения 30 секунд превышено
Все, что я действительно хочу, чтобы сценарий сделал, является запуском, загружающим веб-страницу, и затем уезжайте. Каждая веб-страница может занять до 5 минут для загрузки полностью, и мне не нужна она для загрузки полностью.
Вот то, что я в настоящее время имею:
foreach($sites as $s) //Create one line to read from a wide array
{
file_get_contents($s['url']); // Send to the shells
}
Править: Для очистки любого беспорядка этот сценарий используется для запуска сценариев на других серверах, тот возврат никакие данные.
Править: Я теперь пытаюсь использовать ЗАВИХРЕНИЕ для добиваний цели путем установки тайм-аута одной секунды, чтобы заставить его отправить данные и затем остановиться. Вот мой код:
$ch = curl_init($s['url']); //load the urls
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1); //Only send the data, don't wait.
curl_exec($ch); //Execute
curl_close($ch); //Close it off.
Возможно, я установил опцию неправильно. Я просматриваю некоторые руководства, поскольку мы говорим. Просто дав Вам обновление. Спасибо всем Вас, которые помогают мне к настоящему времени.
Править: А-ч, найденный проблемой. Я использовал CURLOPT_CONNECTTIMEOUT вместо CURLOPT_TIMEOUT. Ой.
Однако теперь сценарии не инициировали. Каждый из них использует ignore_user_abort (TRUE); таким образом, я не могу понять проблему
Ха, поцарапайте это. Работы теперь. Большое спасибо все
Там Есть много способов решить эту проблему.
Вы можете использовать cURL с его функциями curl_multi_ * для асинхронного выполнения запросов. Или используйте cURL обычным способом, но используя 1 в качестве лимита тайм-аута, поэтому он будет запрашивать и возвращать тайм-аут, но запрос будет выполнен.
Если у вас не установлен cURL, вы можете продолжать использовать file_get_contents, но разветвлять процессы (не так круто, но работает), используя что-то вроде ZendX_Console_Process_Unix , чтобы избежать ожидания между каждым запросом.
Так много времени занимает не file_get_contents (), а само сетевое соединение.
Рассмотрите возможность не отправлять данные GET на массив сайтов, а создать RSS-канал и позволить им получать данные RSS.
Если загрузка удаленных страниц занимает до 5 минут, ваш file_get_contents будет сидеть и ждать эти 5 минут. Есть ли способ изменить удаленные сценарии, чтобы они включались в фоновый процесс и выполняли там тяжелую обработку? Таким образом, ваше первое попадание вернется почти сразу, и вам не придется ждать периода запуска.
Другая возможность - выяснить, поможет ли запрос HEAD. HEAD не возвращает никаких данных, только заголовки, поэтому этого может быть достаточно, чтобы запускать удаленные задания, а не ждать полного вывода.
Я не совсем понимаю смысл вашего сценария. Но вот что вы можете сделать:
BR.
Повторите обновление, которое требуется только для триггера операция:
Вы можете попробовать использовать file_get_contents
с таймаутом. Это приведет к вызову удаленного сценария, но соединение будет прервано через n секунд (например, 1).
Если удаленный сценарий настроен так, что он продолжает работать, даже если соединение прервано (в PHP это было бы ignore_user_abort
), он должен работать.
Попробуйте сами. Если это не сработает, вы не сможете обойтись без увеличения time_limit
или использования внешнего исполняемого файла. Но из того, что вы говорите - вам просто нужно сделать запрос - это должно сработать. Вы даже можете попытаться установить тайм-аут на 0
, но я бы этому не поверил.
Из здесь :
<?php
$ctx = stream_context_create(array(
'http' => array(
'timeout' => 1
)
)
);
file_get_contents("http://example.com/", 0, $ctx);
?>
Честно говоря, ответ Криса уже включает такую возможность: curl
также имеет переключатель тайм-аута.