我对一些后端任务(不是web)使用PHP脚本,我发现有时curl_exec会终止执行脚本而不输出任何错误。我希望我的脚本永久运行在一个循环中,并对此有何想法?curl_exec超时可以终止脚本?
回答
,您需要:
set_time_limit(0);
否则,只要你的脚本运行了30秒(或任何max_execution_time在php.ini中指定),该脚本将退出并出现错误。这会中断脚本可能正在做的任何事情,例如从curl_exec()
获得回报。
用PHP写一个守护进程(这基本上是什么好像你正在做的)can be found here关于慎用。
请确保您有错误报告集,把这个在你的PHP文件的顶部:
ini_set('display_errors', true);
error_reporting(E_ALL);
您也可以扩展脚本的执行时间:
ini_set('max_execution_time', 50000);
这很容易被超时问题。
您可以设置卷曲超时(用于获取网站),例如到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);
这可以避免中断执行脚本吗? – 2010-05-15 00:57:37
是的,如果中断的原因是PHP超时。如果你没有设置超时而有(无意的)无限循环,那么默认超时将迟早会中断脚本。当然,我们不知道,在超时会阻止它之前,您的脚本是否因其他原因被中断。 – Sam 2010-05-16 07:22:09
在你的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时前面加上时间戳如果你想在进程能够启动和运行无限到长篇大论/文件输出
当您使用上述选项发生错误后,请将其发布,以便我们可以帮助您解决它:) – Michael 2010-05-16 05:20:54
- 1. 暂停PHP脚本,以防止超时
- 2. PHP usleep,以防止脚本超时
- 3. 以bash脚本终止Curl Telnet会话
- 4. php脚本可以停止?
- 5. subprocess:可以沟通()超时,因为wait()终止?
- 6. 脚本终止时的调用函数
- 7. nohup进程终止时触发脚本
- 8. 符合条件时终止脚本
- 9. 在进程终止时运行脚本
- 10. hackerrank终止到期超时
- 11. 发布超时并终止
- 12. 超时终止函数
- 13. bash脚本SFTP退出终止脚本
- 14. 立即终止脚本
- 15. 终止一个IronPython脚本
- 16. Cron终止Python脚本?
- 17. Shell脚本终止通知
- 18. cron作业脚本终止
- 19. 脚本不终止立即
- 20. 终止从foo脚本
- 21. 使用phpexcel终止脚本
- 22. 如何终止Lua脚本?
- 23. curl_exec导致php脚本停止任何事情
- 24. 如何停止python脚本终止?
- 25. curl_exec()始终返回false
- 26. Python:终止一个导入的脚本而不会终止导入的脚本
- 27. 如何终止netcat,以便我的脚本可以再次循环?
- 28. bash脚本超时
- 29. PHP脚本超时
- 30. JavaScript超时脚本
是的,它是用于后端任务。我需要它循环,只要我需要。我需要知道为什么curl_exec会终止脚本,以及如何避免这个 – 2010-05-14 14:07:17
请显示一些代码。你知道PHP的max_execution_time设置吗? – 2010-05-14 14:09:26
此任务是否不断运行(即过程开始并持续数小时),还是某种计划任务? – 2010-05-16 05:19:48