使用curl_multi_exec处理错误
我的问题是围绕在PHP中使用curl_multi_exec。我使用类似于此链路上示出的例子的代码:http://www.rustyrazorblade.com/2008/02/curl_multi_exec/使用curl_multi_exec处理错误
随着大约10的URL来执行,我有时遇到的错误消息: Fatal error: Maximum execution time of 30 seconds exceeded in...
此消息指向的代码中的curl_multi_exec线。
尽管如此,我仍然需要继续处理,并且还使用手段来记录哪些URL无法执行。
有人可以帮我处理这种情况吗?
谢谢!
我会尝试让父进程分叉子进程。父进程能够等到孩子完成并可以看到孩子的退出代码。因此,如果url被成功处理,那么它的退出代码为0,否则非零代表错误。
父进程仍然需要有一个较长的max_execution_time设置,可以在脚本本身内设置该设置,而子进程的max_execution_time设置为30秒。
下面是如何使用PHP 叉http://www.electrictoolbox.com/article/php/process-forking/
您可以设置父的max_execution_time这样
set_time_limit (0)
0将允许脚本没有时间限制运行。
只是关于子进程的一个附注,必须允许子进程在杀死父进程之前完成,否则你可以让僵尸进程没有人拥有它们。
没有更直接的方式知道curl_multi_exec操作已超时为相关的URL吗? 我感觉应该有一种方法来通过更新某个变量来指示失败。 – Enthusiast 2010-07-27 10:18:27
如果您有权访问php.ini文件,则可以增加max_execution_time设置。这是几秒钟内PHP脚本可以运行的时间。
我仍然想保持30秒的执行时间限制,并确定哪些URL超出了时间限制,所以我不会使用此选项。 – Enthusiast 2010-07-26 16:29:03
在每个curl句柄上使用[curl_getinfo()](http://php.net/manual/en/function.curl-getinfo.php)来了解请求的执行时间和错误。但@JochenJung是正确的,你的本地脚本超时,10个请求的总时间超过你的30秒限制。您将不得不增加本地脚本的30秒超时时间,或者减少默认为无限制的[CURLOPT_CONNECTTIMEOUT/CURLOPT_TIMEOUT](http://php.net/manual/en/function.curl-setopt.php)时间。 – Chloe 2016-08-31 19:52:44