59

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

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

  2. 使用该功能是否有风险sleep()?是否会消耗大量 CPU 性能?

4

5 回答 5

103

您应该尝试一下,只要有一个休眠时间超过您的最大执行时间的脚本。

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

剧透:在 Linux 下,睡眠时间被忽略,但在 Windows 下,它算作执行时间。

于 2009-04-11T23:09:30.253 回答
8

它只影响脚本时间而不是像 sleep() 这样的系统调用。显然存在一个错误,其中包含 Windows sleep() 。最大执行时间是实时的,而不是 CPU 时间或类似的东西。但是,您可以更改它:

至于最后两者的区别,我相信 max_execution_time 是一个固定的量。跑步:

ini_set('max_execution_time', 60);

将脚本限制为 60 秒。如果您在 20 秒后致电:

set_time_limit(60);

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

于 2009-04-11T23:13:07.467 回答
8

PHP sleep() 页面中,有这个用户提供的注释:

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

于 2009-04-11T23:15:03.530 回答
0

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

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

编辑:我把 network.http.keep-alive.timeout 和 browser.urlbar.search.timeout 的单位搞混了。它确实以秒为单位,而不是十分之一秒。

于 2009-04-11T23:52:34.720 回答
-6

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

b) 它与消耗 CPU 性能相反——它让其他应用程序使用 CPU(当应用程序休眠时,该应用程序的 CPU 使用率将接近 0%)。除了从用户身上抽出时间之外,我真的想不出使用它的任何风险。

于 2009-04-11T23:10:59.047 回答