Хорошо, у меня есть скрипт, который использует скручивание для нескольких запросов. Последние два дня он работает пару раз, но затем, в конце концов, начинает выдавать ошибку 500. Я пробую обычный curl_init, и это работает, так что я знаю, что я получаю связь с сайтом, к которому я подключаюсь. И если я подожду до завтра, он снова заработает. Так что я представляю, что там какая-то утечка или что-то происходит. Я не могу понять, как проверить 500 ошибок на Godaddy. Но есть ли способ, которым я могу проверить curl, чтобы увидеть, в чем проблема или остановить его из бесконечного цикла. Потому что это не соединение. И просто, чтобы уточнить, тот же сценарий сначала работает, но после определенного количества попыток он останавливается.
while (($execrun = curl_multi_exec($this->multi_handle, $running)) ==
CURLM_CALL_MULTI_PERFORM) {
;
}
if ($execrun != CURLM_OK) {
break;
}
//not entering this loop
while ($info = curl_multi_info_read($this->multi_handle)) {
}
Изменить: я делаю около 30 запросов одновременно. Он работает очень быстро и работает как первые 4-5 раз, когда я загружаю скрипт. Но потом, в конце концов, он просто остановится, и мне придется ждать следующего дня. Вот цикл while, где единственные случаи закрытия дескрипторов. Я никогда не сталкивался с этой проблемой раньше. Понятия не имею, где искать. Он просто не подключится к сайту и не войдет в этот цикл.
while ($info = curl_multi_info_read($this->multi_handle)) {
$ch = $info['handle'];
$ch_array_key = (int)$ch;if (!isset($this->outstanding_requests[$ch_array_key])) {
die("Error - handle wasn't found in requests: '$ch' in ".
print_r($this->outstanding_requests, true));
}
$request = $this->outstanding_requests[$ch_array_key];
$url = $request['url'];
$content = curl_multi_getcontent($ch);
$callback = $this->curl['CALLBACK'];
$user_data = $request['user_data'];
if(curl_getinfo($ch, CURLINFO_HTTP_CODE) == 200)
{
call_user_func($callback, $content, $url, $ch, $user_data, $user_data);
unset($this->outstanding_requests[$ch_array_key]);
curl_multi_remove_handle($this->multi_handle, $ch);
curl_close($ch);
}
else
{
//unset the outstanding request so it doesn't get stuck in a loop
unset($this->outstanding_requests[$ch_array_key]);
curl_multi_remove_handle($this->multi_handle, $ch);
curl_close($ch);
//these come back as 0's, so not found. Restart the request
self::startRequest($url);
}
//self::msg('USER END');
}
Задача ещё не решена.
Других решений пока нет …