睡眠时间是否计算执行时间限制?

我有两个关于PHP中的sleep()函数的问题:

  1. 睡眠时间是否影响我的PHP脚本的最大执行时间限制? 有时,PHP会显示消息“最大执行时间超过30秒”。 如果我使用sleep(31)这个消息会出现吗?

  2. 使用sleep()函数时是否有风险? 它是否花费了很多CPU性能?

你应该尝试一下,只要有一个脚本比你的最大执行时间多睡一会儿。

 <?php sleep(ini_get('max_execution_time') + 10); ?> 

破坏者: 在Linux下,睡眠时间被忽略,但在Windows下,它被视为执行时间。

它只影响脚本时间而不影响像sleep()这样的系统调用。 显然有一个在Windows睡眠()被包括在内的错误。 最大的执行时间大约是实时的,而不是CPU时间或类似的东西。 你可以改变它:

  • 在您的php.ini中的max_execution_time指令。 这是一个全球性的环境。
  • 用上面的指令使用ini_set() 。 这只会改变它只为当前正在执行的脚本,只为执行;
  • set_time_limit() :也是一个本地更改。

至于最后两个之间的差异,我相信max_execution_time是一个固定的数量。 运行:

 ini_set('max_execution_time', 60); 

将脚本限制到60秒。 如果20秒后你打电话给:

 set_time_limit(60); 

脚本现在将被限制为20 + 60 = 80秒。

在PHP sleep()页面中 ,有这个用户贡献的注释:

注意:set_time_limit()函数和configuration指令max_execution_time仅影响脚本本身的执行时间。 在确定脚本运行的最长时间时,不包括使用system(),sleep()函数,数据库查询等系统调用脚本执行之外发生的任何活动时间。

其他人已经介绍了sleep()和PHP脚本执行时间限制的基础知识,但是在使用真正的长时间睡眠期间还应该意识到另一个风险。

通常,当浏览器向服务器发送请求并且没有从服务器接收任何数据时,连接可能会超时。 这个时间限制取决于浏览器的configuration,但是我已经读了IE7的默认值只有30秒,而Firefox的默认值是115秒 -你可以通过about:config来检查你自己的configuration并过滤network.http.keep-alive.timeout (时间限制以秒为单位)。

编辑:我有network.http.keep-alive.timeout和browser.urlbar.search.timeout的单位混合起来。 这确实是在几秒钟内,而不是十分之一秒。

a)是的,它会计入时间限制(所以睡眠(31)会触发一个错误)

b)与CPU性能相反,它允许其他应用程序使用CPU(当应用程序hibernate时,该应用程序的CPU使用率将接近0%)。 除了从用户那里抽出时间外,我真的不用想到使用这个的风险。