2010-05-14 68 views
0

我对一些后端任务(不是web)使用PHP脚本,我发现有时curl_exec会终止执行脚本而不输出任何错误。我希望我的脚本永久运行在一个循环中,并对此有何想法?curl_exec超时可以终止脚本?

+0

是的,它是用于后端任务。我需要它循环,只要我需要。我需要知道为什么curl_exec会终止脚本,以及如何避免这个 – 2010-05-14 14:07:17

+0

请显示一些代码。你知道PHP的max_execution_time设置吗? – 2010-05-14 14:09:26

+0

此任务是否不断运行(即过程开始并持续数小时),还是某种计划任务? – 2010-05-16 05:19:48

回答

2

,您需要:

set_time_limit(0); 

否则,只要你的脚本运行了30秒(或任何max_execution_time在php.ini中指定),该脚本将退出并出现错误。这会中断脚本可能正在做的任何事情,例如从curl_exec()获得回报。

用PHP写一个守护进程(这基本上是什么好像你正在做的)can be found here关于慎用。

0

请确保您有错误报告集,把这个在你的PHP文件的顶部:

ini_set('display_errors', true); 
error_reporting(E_ALL); 

您也可以扩展脚本的执行时间:

ini_set('max_execution_time', 50000); 
1

这很容易被超时问题。

您可以设置卷曲超时(用于获取网站),例如到60秒通过

curl_setopt($ch, CURLOPT_TIMEOUT, 60); 

然后,您需要设置PHP超时高于60秒,

set_time_limit(90); 

这个超时在Windows上是实时的,在Unix上是CPU时间,因此在Unix中你需要的时间要少得多。在你的循环中设置PHP超时非常重要,否则就是整体限制,永远不会满足你的无限循环。

do { 
    set_time_limit(90); 
    // curl stuff 
} while (true); 
+0

这可以避免中断执行脚本吗? – 2010-05-15 00:57:37

+0

是的,如果中断的原因是PHP超时。如果你没有设置超时而有(无意的)无限循环,那么默认超时将迟早会中断脚本。当然,我们不知道,在超时会阻止它之前,您的脚本是否因其他原因被中断。 – Sam 2010-05-16 07:22:09

0

在你的PHP,你可以设置CURLOPT_VERBOSE变量追查问题:

 
curl_setopt($curl, CURLOPT_VERBOSE, TRUE); 

这则记录到STDERR,或到指定的文件使用CURLOPT_STDERR:

 
curl_setopt($curl, CURLOPT_STDERR, './path/to/file.log'); 

从命令行,您可以使用以下开关:

* --verbose to report more info to the command line 
* --trace <file> or --trace-ascii <file> to trace to a file 

可以使用--trace时前面加上时间戳如果你想在进程能够启动和运行无限到长篇大论/文件输出

+0

当您使用上述选项发生错误后,请将其发布,以便我们可以帮助您解决它:) – Michael 2010-05-16 05:20:54