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

时间:2009-04-11 23:06:21

标签: php sleep execution max

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

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

  2. ,是否会显示此消息
  3. 使用sleep()功能时是否有任何风险?是否会耗费大量CPU性能?

5 个答案:

答案 0 :(得分:84)

你应该尝试一下,只需要一个睡眠时间超过最长执行时间的脚本。

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

剧透:Under Linux, sleeping time is ignored, but under Windows, it counts as execution time.

答案 1 :(得分:8)

它只影响脚本时间而不影响睡眠()等系统调用。显然有一个错误,其中包括Windows sleep()。最大执行时间大约是实时,而不是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秒。

答案 2 :(得分:7)

来自PHP sleep() page,这是用户提供的注释:

  

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

答案 3 :(得分:0)

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

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

编辑:我将network.http.keep-alive.timeout和browser.urlbar.search.timeout的单位混淆了。它确实在几秒钟内,而不是十分之一秒。

答案 4 :(得分:-6)

a)是的,它计入时间限制(因此睡眠(31)将触发错误)

b)它与计算CPU性能相反 - 它允许其他应用程序使用CPU(当应用程序休眠时,该应用程序的CPU使用率将接近0%)。除了从用户那里抽出时间之外,我无法想到使用它的任何风险。