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

Php 睡眠时间是否算作执行时间限制?,php,sleep,execution,max,Php,Sleep,Execution,Max,关于PHP中的sleep()函数,我有两个问题: 睡眠时间是否会影响PHP脚本的最大执行时间限制?有时,PHP会显示消息“超出了30秒的最大执行时间”。如果我使用sleep(31),是否会显示此消息 使用sleep()功能时是否存在任何风险?它会花费很多CPU性能吗 您应该尝试一下,只要有一个脚本休眠时间超过您的最大执行时间 <?php sleep(ini_get('max_execution_time') + 10); ?> 扰流板:a)是的,它会计入时间限制(因此睡眠(

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

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

  • 使用
    sleep()
    功能时是否存在任何风险?它会花费很多CPU性能吗


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

    <?php
      sleep(ini_get('max_execution_time') + 10);
    ?>
    
    
    
    扰流板:

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


    b) 它与降低CPU性能相反——它允许其他应用程序使用CPU(当应用程序休眠时,该应用程序的CPU使用率将接近0%)。除了占用用户的时间之外,我真的想不出使用它有什么风险。

    它只影响脚本时间,而不影响像sleep()这样的系统调用。显然,在Windows sleep()中包含了一个bug。最大执行时间是关于实时性的,而不是CPU时间或诸如此类的时间。但是,您可以更改它:

    • php.ini中的指令。这是一个全球性的环境
    • 与上述指令一起使用。这将仅针对当前正在执行的脚本更改它,仅针对该执行
    • :也是本地更改
    至于最后两个之间的差异,我认为最大执行时间是一个固定的数量。运行:

    ini_set('max_execution_time', 60);
    
    将脚本限制为60秒。如果您在20秒后呼叫:

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

    从中,有以下用户提供的注释:

    注意:set_time_limit()函数 和配置指令 最大执行时间仅影响 脚本本身的执行时间。 任何花在这方面的时间 在执行 脚本,例如使用 system(),sleep()函数, 不包括数据库查询等 在确定 脚本一直在运行


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

    通常,当浏览器向服务器发送请求但未从服务器接收任何数据时,连接可能会超时。这个时间限制取决于浏览器的配置,但我已经了解到IE7的默认值只有30秒,而--您可以在Firefox中检查自己的配置,方法是转到about:config和filtering for network.http.keep-alive.timeout(时间限制以秒为单位指定)


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

    我猜它确实意味着。。。为什么在PHP中需要一个sleep()?只是想知道。。。请再说原因:我只能每5分钟运行一次cronjobs。所以我想我可以用$waittime=mt_rand(0290);睡眠($waittime)。。。并同时执行代码4次。所以我应该在4个不同的时间点有一个cron。我启动了一些睡眠时间超过100秒的脚本。现在我的网站不再加载了。服务器可能只能同时运行x个脚本,并且有x个脚本处于休眠状态。这可能是真的吗?@marco92w您的主机可能限制了您可以使用的资源量,并且它们可能会将资源计算在线程中。只是补充一下,此行为仅在*nix上显示。在windows上,set_time_limit()每次都获胜。??有6个答案说的大致相同,而我的答案被否决了?这是怎么回事?上面的问题是什么?可能是因为你在否决投票后把答案改成了正确答案。底部没有经过编辑的时间,他怎么能改变呢?我不知道为什么否决了。我是提问者,你很好地回答了我的问题。谢谢@卡尔文:如果你没有注意到的话,他们把它改了几周(或几天),为不编辑历史提供了更大的宽限期。你实际上可以接受他的答案,并为社区服务。我喜欢看到非常简单的答案比一个巨大的段落更能说明问题。我也喜欢扰流板!我认为你的这个答案是一个很好的例子,为什么一个人不应该简单地尝试一个代码片段,而是应该问。谢谢,我以前不知道。我认为必须在1/1秒内指定限制,因为about:config中的值是30。;)啊,你说得对。以秒为单位。但是默认值应该是300秒,而不是30秒,所以您的设置可能被浏览器扩展更改了。