PHP执行时间超过max_execution_time ...有时候

时间:2011-04-15 14:17:19

标签: php apache curl timeout

我有一个PHP类,一旦调用,将时间限制设置为60秒。关于这个类的唯一特殊之处在于它使用curl_multi_exec()。

set_time_limit(60);
ini_set('max_execution_time', 60);

问题是在Apache的/ server-status页面下,这个页面和另一个使用单线程curl的页面运行超过了max_execution_time,有时达到200秒!

我错过了什么?有没有办法设置Apache来终止运行时间超过90秒的脚本(甚至连接)?

2 个答案:

答案 0 :(得分:4)

来自the manual

  

set_time_limit()函数和配置指令max_execution_time仅影响脚本本身的执行时间。在确定脚本运行的最长时间时,不会包括在执行脚本之外发生的任何活动,例如使用system()的系统调用,流操作,数据库查询等。

由于curl请求属于此类别,因此等待请求完成所花费的时间将不计算在内。您应该将卷曲设置CURLOPT_TIMEOUT设置为较低的值,或者监控自己执行脚本所花费的时间。

答案 1 :(得分:2)

啊哈!当您设置该配置时,自动收报机会自行重置,例如:

sleep(10);
set_time_limit(20);
sleep(10);
set_time_limit(5);
sleep(10); // dies after 5 seconds

总运行时间约为30秒。

关于curl_exec_multi,您可以设置CURL超时选项而不是PHP。这取决于你认为谁会宁愿死 - 卷曲连接或完整请求。

相关问题