我有两个关于PHP中sleep()
函数的问题:
睡眠时间是否影响我的PHP脚本的最大执行时间限制?有时,PHP会显示消息“超过30秒的最大执行时间”。如果我使用sleep(31)
?
使用sleep()
功能时是否有任何风险?是否会耗费大量CPU性能?
答案 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时间或类似的东西。但是你可以改变它:
至于最后两个之间的差异,我认为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%)。除了从用户那里抽出时间之外,我无法想到使用它的任何风险。