2015-03-19 29 views
0

我有一个约20000与未处理的Youtube帖子表。 这张表使用cronjob自动填充,它可以正常工作。 现在我有一个代码,应该只在所有帖子都被处理后退出。curl_exec随机时间后PHP致命错误

为此,我必须使用curl从youtube获取更多信息。 我的代码被罚款运行,但时间/职位的一个随机时间后,我得到一个致命的错误:

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

正如你所看到的,同样的代码运行良好,但在n分机时间,它不会运行并创建一个致命错误。 当我重新运行脚本时,它也会随机运行一段时间,然后再次崩溃,因此它不能作为输入url。

任何想法如何解决这个问题,我没有得到致命的错误?

编辑: 我忘了补充: 函数api_get在类Youtube.php。 我从一个名为youtube_parsing.php的文件运行此代码。 在youtube_parsing.php我有这样避免了执行限制:

set_time_limit(0); 
ini_set("max_execution_time", 0); 
+1

这可能是一个网络延迟问题。你有没有尝试在curl代码中增加这个设置? ''CURLOPT_CONNECTTIMEOUT => 30'你也可以尝试用'set_time_limit()'增加PHP执行时间限制' – gazareth 2015-03-19 10:22:08

+1

我已经试过了各种值,但我并不在意卷曲是否失败,我只想代码继续而不是得到一个致命的错误,停止一切。 – SheperdOfFire 2015-03-19 10:28:31

+0

Youtube.php的第183行是什么?它看起来在某个地方有一个PHP最大时间限制,它在达到卷曲限制之前就会触及。但是,你已经避免了执行限制,这很奇怪。 – gazareth 2015-03-19 13:03:04

回答

0

你必须增加最大可能 execution time在php.ini。

+1

对不起,我忘了把它添加到我的文章中,我现在添加了它。 – SheperdOfFire 2015-03-19 10:27:32

+0

当php在安全模式下运行时,set_time_limit(0)不起作用。 – doev 2015-03-19 10:29:36

+1

安全模式关闭 – SheperdOfFire 2015-03-19 10:34:51