У меня есть стол около 20000 с необработанными сообщениями Youtube. Эта таблица автоматически заполняется с помощью cronjob, который работает нормально. Теперь у меня есть код, который должен только выйти, когда все сообщения были обработаны.curl_exec PHP фатальная ошибка после случайного количества времени
Для этого я должен получить дополнительную информацию с youtube с помощью curl. код у меня работает нормально, но после случайного количества времени/сообщений, я получаю фатальную ошибку:
PHP Fatal error: Maximum execution time of 30 seconds exceeded in /home/local/domains/domain.com/private/include/classes/Youtube.php on line 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 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 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 Fatal error: Maximum execution time of 30 seconds exceeded in /home/local/domains/localthisday.nl/private/include/classes/Youtube.php on line 183
Как вы можете видеть, тот же код работает нормально, но п ext time, он не запускается и создает фатальную ошибку. Когда я перезапускаю скрипт, он также работает в случайном количестве времени, а затем снова сработает, поэтому он не может быть входным URL-адресом.
Любые идеи, как решить эту проблему, я не получаю фатальную ошибку?
Редактировать: Я забыл добавить: Функция api_get находится в классе Youtube.php
. Я запускаю этот код из файла с именем youtube_parsing.php
. В youtube_parsing.php
я это, чтобы избежать ограничения выполнения:
set_time_limit(0);
ini_set("max_execution_time", 0);
Это, вероятно, проблема сетевой латентности. Вы пытались увеличить эту настройку в своем curl-коде? 'CURLOPT_CONNECTTIMEOUT => 30' Вы также можете попробовать увеличить время выполнения PHP с помощью' set_time_limit() ' – gazareth
Я пробовал разные значения, но мне все равно, если локон терпит неудачу или нет, я просто хочу чтобы продолжить код вместо того, чтобы получить фатальную ошибку, которая останавливает все. – SheperdOfFire
Что такое строка 183 из Youtube.php? Похоже, что у него есть максимальный временной интервал PHP, где он попадает, прежде чем он достигнет предела завитка. Но странно, что вы все равно избегали предела исполнения. – gazareth