2011-09-20 169 views
2

在下面的代码片段快速浏览一下:为什么不按预期工作set_time_limit?

<? 
set_time_limit(5); 
sleep(30); 
echo 'done'; 
?> 

当我执行此我箱,脚本整整30秒,并显示“完成”。

为什么?

不应该在5秒内终止并且不给脚本显示'done'的时间?

这不是在CLI模式下。 Nginx + PHP_FPM。

任何想法?


我选择将'答案'放在这里,因为下面有很多好的和有效的答案。但是......这似乎是睡眠的一个特殊问题。

<? 
set_time_limit(5); 
while(true==true){ 
} 
sleep(30); 
echo 'done'; 
?> 

按预期工作。

+3

“睡眠()”时间是否会计算执行时间? –

回答

1

引述the manual

set_time_limit()功能和配置指令 max_execution_time只影响脚本本身 的执行时间。在确定脚本运行的最长时间 时,不包括脚本执行 以外发生的任何活动时间,例如系统调用system(),流操作, 数据库查询等。在测量时间是真实的Windows 上,这不是真的。

,因为它是一个OS进程并没有什么正在做sleep调用不会增加了执行时间。

0

从php.net:被调用时,set_time_limit()从零开始重新启动超时计数器。换句话说,如果超时时间是默认的30秒,并且在脚本执行过程中有25秒钟,则调用如set_time_limit(20),脚本将在超时之前运行总共45秒。

你可以减去相匹配的时候,你要

+0

阅读问题/代码? –

1

按照set_time_limit()文档:

注:

的set_time_limit()函数的功能和配置指令的max_execution_time只影响脚本本身的执行时间。在确定脚本运行的最长时间时,不包括使用system()系统调用,流操作,数据库查询等脚本执行之外发生的任何活动时间。在测量时间是真实的Windows上,这不是事实。

sleep()的调用不算作执行时间(Windows下除外)。此行为已在set_time_limit()页面的注释中详细记录。

相关问题