我正在使用PHP脚本执行一些后端任务(而不是web),我发现有时curl_exec将终止执行脚本而不输出任何错误。我希望我的脚本永远在循环中运行并且对此有任何想法吗?
答案 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将时间戳添加到详细/文件输出