У меня есть таблица около 20000 с необработанными сообщениями Youtube.
Эта таблица автоматически заполняется с помощью cronjob, который работает нормально.
Теперь у меня есть код, который должен выйти только после обработки всех сообщений.
Для этого мне нужно получить дополнительную информацию с YouTube, используя curl.
Код у меня работает нормально, но после случайного количества времени / сообщений, я получаю фатальную ошибку:
Неустранимая ошибка PHP: максимальное время выполнения 30 секунд превышено в
/home/local/domains/domain.com/private/include/classes/Youtube.php на
линия 183
Это код:
public function api_get($url, $params)
{
error_log(__FILE__."::".__LINE__." - ".date("U"), 0);
//set the youtube key
$params["key"] = $this->youtube_key;
//boilerplates for CURL
$tuCurl = curl_init();
error_log(__FILE__."::".__LINE__." - ".date("U"), 0);
curl_setopt_array($tuCurl, array(
CURLOPT_URL => $url . (strpos($url, "?") === false ? "?" : "") . http_build_query($params),
CURLOPT_PORT => strpos($url, "https") === false ? 80 : 443,
CURLOPT_CONNECTTIMEOUT => 30,
CURLOPT_FRESH_CONNECT => true,
CURLOPT_FORBID_REUSE => true,
CURLOPT_TIMEOUT => 60,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_MAXREDIRS => 5,
CURLOPT_NOPROGRESS => false // only for debugging purposes
));
error_log(__FILE__."::".__LINE__." - ".date("U"), 0);
$tuData = curl_exec($tuCurl);
error_log(__FILE__."::".__LINE__." - ".date("U"), 0);
if (curl_errno($tuCurl)) {
$curlError = curl_error($tuCurl);
error_log(__FILE__."::".__LINE__." - ".date("U"), 0);
curl_close($tuCurl);
error_log(__FILE__."::".__LINE__." - ".date("U"), 0);
throw new Elision("[#505011] "._("Curl Error:")." ". $curlError);
}
error_log(__FILE__."::".__LINE__." - ".date("U"), 0);
curl_close($tuCurl);
error_log(__FILE__."::".__LINE__." - ".date("U"), 0);
return $tuData;
}
я использовал error_log
чтобы выяснить, где была моя проблема, когда я запускаю этот код с использованием SSH, я получаю это (я отображаю только последние несколько строк):
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::35
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::37
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::45
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::47
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::49
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::51
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::56
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::18
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::20
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::22
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::24
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::26
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::28
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::31
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::33
— 1426757941
/home/local/domains/localthisday.nl/private/include/classes/Youtube.php::163
— 1426757941
/home/local/domains/localthisday.nl/private/include/classes/Youtube.php::169
— 1426757941
/home/local/domains/localthisday.nl/private/include/classes/Youtube.php::182
— 1426757941
% Всего% Получено% Xferd Средняя скорость Время Время Время Текущий
Dload Upload Всего отработанных левых скоростей
102 1131 102 1131 0 0 4238 0 -: -: — -: -: — -: -: — 15080
/home/local/domains/localthisday.nl/private/include/classes/Youtube.php::184
— 1426757941
/home/local/domains/localthisday.nl/private/include/classes/Youtube.php::192
— 1426757941
/home/local/domains/localthisday.nl/private/include/classes/Youtube.php::194
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::35
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::37
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::45
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::47
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::49
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::51
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::56
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::18
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::20
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::22
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::24
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::26
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::28
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::31
— 1426757941
/home/local/domains/localthisday.nl/private/socket/youtube_parsing.php::33
— 1426757941
/home/local/domains/localthisday.nl/private/include/classes/Youtube.php::163
— 1426757941
/home/local/domains/localthisday.nl/private/include/classes/Youtube.php::169
— 1426757941
/home/local/domains/localthisday.nl/private/include/classes/Youtube.php::182
— 1426757941
Неустранимая ошибка PHP: превышено максимальное время выполнения в 30 секунд в /home/local/domains/localthisday.nl/private/include/classes/Youtube.php
по линии 183
Как видите, тот же код работает нормально, но в следующий раз он не запускается и создает фатальную ошибку.
Когда я перезапускаю скрипт, он также работает в течение случайного промежутка времени, а затем снова падает, поэтому он не может быть введенным URL-адресом.
Любые идеи, как решить эту проблему, чтобы я не получил роковую ошибку?
Редактировать:
Я забыл добавить:
Функция api_get находится в классе Youtube.php
,
Я запускаю этот код из файла с именем youtube_parsing.php
,
В youtube_parsing.php
У меня есть это, чтобы избежать ограничения выполнения:
set_time_limit(0);
ini_set("max_execution_time", 0);
Вы должны увеличить максимально возможное время исполнения в php.ini.
Других решений пока нет …