Я делаю некоторые запросы с curl_multi_exec. Мой код выглядит следующим образом:
$rMultiHandler = curl_multi_init();
//next lines are repeated for several resources
$rResource = curl_init();
curl_setopt($rResource, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($rResource, CURLOPT_URL, $url);
curl_setopt($rResource, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($rResource, CURLOPT_TIMEOUT, 1800);
curl_setopt($rResource, CURLOPT_SSL_VERIFYPEER, false);
curl_multi_add_handle($rMultiHandler, $rResource);
//-----------------------
$iRunningProcesses = null;
do {
curl_multi_exec($rMultiHandler, $iRunningProcesses);
usleep(100000);
} while ($iRunningProcesses > 0);
//do some work with received data;
curl_multi_close($rMultiHandler);
Проблема в том, что эти запросы занимают много времени (5-10 минут). И иногда один из этих запросов (самый длинный) повторяется дважды. Похоже, что curl некоторое время ждет данных, ничего не получает и повторяет запрос.
Как исправить это поведение?
Проблема была в неправильной конфигурации Apache и fcgi. После увеличения времени ожидания проблема ушла (
timeout
для apacheFcgidIOTimeout
иFcgidBusyTimeout
для fcgi).