Ситуация такова, что иногда этот сервер отключается от сети из-за ddos и ему приходится сбрасывать свой собственный стек TCP. В то время как это происходит, когда этот скрипт выполняется, он обычно зависает на функции cur_exec() примерно на 6 минут или около того, прежде чем окончательно выйдет из строя.
Другие предполагали, и я согласен, что, скорее всего, происходит то, что внутренние части Curl зависают при попытке выполнить HTTP-запрос, и эти зависания либо не учитываются при тайм-ауте, либо это просто своего рода ошибка, при которой вся функция зависает при попытке сделать эти HTTP-запросы. запросы.
Вот мой код:
Код: Выделить всё
set_time_limit(120);
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 etc");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($ch,CURLOPT_TIMEOUT,10);
curl_setopt($ch,CURLOPT_INTERFACE,OPERATING_IP);
$return = curl_exec($ch);
Есть ли какой-нибудь другой способ БЫСТРО завершить этот вызов. Он загружает только очень маленький статический файл, 10 секунд - это БОЛЕЕ достаточно времени для его загрузки.
Единственный способ, который я могу придумать, - это поместить функцию-оболочку cur_exec() в отдельный скрипт и заставить мой скрипт вызывать ее с аргументом командной строки, который передаст ей фактический URL-адрес. А затем используйте вызов тайм-аута CLI, чтобы заставить его выйти из строя через 10 секунд. Но это беспорядочное решение, должно же быть ЧТО-ТО более элегантное?