curl_exec超时可以终止脚本吗?

时间:2010-05-14 14:00:00

标签: php curl scripting libcurl

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

4 个答案:

答案 0 :(得分:2)

如果您希望流程能够无限启动和运行,则需要:

set_time_limit(0);

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

关于使用PHP编写守护进程的警告(基本上就是你正在做的事情)can be found here

答案 1 :(得分: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);

答案 2 :(得分:0)

确保您有错误报告集,将其置于您的php文件之上:

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

此外,您可以延长脚本的执行时间:

ini_set('max_execution_time', 50000);

答案 3 :(得分: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-time将时间戳添加到详细/文件输出