sleep()
关于PHP中的函数,我有两个问题:
睡眠时间会影响我的 PHP 脚本的最大执行时间限制吗?有时,PHP 会显示消息“超出最大执行时间 30 秒”。如果我使用 会出现此消息
sleep(31)
吗?使用该功能是否有风险
sleep()
?是否会消耗大量 CPU 性能?
您应该尝试一下,只要有一个休眠时间超过您的最大执行时间的脚本。
<?php
sleep(ini_get('max_execution_time') + 10);
?>
它只影响脚本时间而不是像 sleep() 这样的系统调用。显然存在一个错误,其中包含 Windows sleep() 。最大执行时间是实时的,而不是 CPU 时间或类似的东西。但是,您可以更改它:
至于最后两者的区别,我相信 max_execution_time 是一个固定的量。跑步:
ini_set('max_execution_time', 60);
将脚本限制为 60 秒。如果您在 20 秒后致电:
set_time_limit(60);
脚本现在将限制为 20 + 60 = 80 秒。
在PHP sleep() 页面中,有这个用户提供的注释:
注意: set_time_limit() 函数和配置指令 max_execution_time 只影响脚本本身的执行时间。在确定脚本运行的最长时间时,不包括在脚本执行之外发生的活动所花费的任何时间,例如使用 system() 的系统调用、sleep() 函数、数据库查询等。
其他人已经介绍了 sleep() 和 PHP 脚本执行时间限制的基础知识,但是您还应该注意使用非常长的睡眠时间时的另一个风险。
通常,当浏览器向服务器发送请求但没有从服务器接收任何数据时,连接可能会超时。这个时间限制取决于浏览器的配置,但我读过 IE7 的默认值只有 30 秒,而Firefox 的默认值是 115 秒——你可以通过about:config在 Firefox 中检查自己的配置并过滤network.http.keep-alive.timeout(时间限制以秒为单位指定)。
编辑:我把 network.http.keep-alive.timeout 和 browser.urlbar.search.timeout 的单位搞混了。它确实以秒为单位,而不是十分之一秒。
a) 是的,它计入时间限制(因此 sleep(31) 将触发错误)
b) 它与消耗 CPU 性能相反——它让其他应用程序使用 CPU(当应用程序休眠时,该应用程序的 CPU 使用率将接近 0%)。除了从用户身上抽出时间之外,我真的想不出使用它的任何风险。