【问题标题】:PHP sleep() function killing script after some time一段时间后PHP sleep()函数杀死脚本
【发布时间】:2013-02-18 16:05:32
【问题描述】:

我在php中长时间使用sleep()函数时遇到问题,如果我测试以下代码都运行良好:

<?php

set_time_limit(0);

$i = 0;

while($i < 10) {

    echo $i.'<br />';

    if($i == 5){        
        echo 'sleeping 5 secs<br />';
        sleep(5);   
        echo 'waking up<br />';
    }

    $i++;
}

?>

*****OUTPUT****

0
1
2
3
4
5
sleeping 5 secs
waking up
6
7
8
9

*****OUTPUT****

它会休眠 5 秒,然后“唤醒”会毫无问题地回显,但是,如果我将脚本休眠的秒数提高到 15 分钟,则输出如下:

*****OUTPUT****

0
1
2
3
4
5
sleeping 900 secs //(15 mins)

*****OUTPUT****

该脚本在睡眠 15 分钟后似乎被杀死了!!,这可能是什么原因造成的?请注意,我使用 set_time_limit(0) 将 max_execution_time 标志设置为无限;在脚本的顶部。

我将不胜感激,谢谢!

【问题讨论】:

  • 我很好奇,你为什么要让一个脚本睡 15 分钟?
  • 是的,同样的问题
  • 这个 CLI 还是基于浏览器的?

标签: php


【解决方案1】:

来自 PHP 手册:

调用时,set_time_limit() 从零重新启动超时计数器。 也就是说,如果超时时间是默认的 30 秒,而 25 脚本执行的秒数,例如 set_time_limit(20) 的调用是 完成后,脚本将在超时之前运行总共 45 秒。

尝试:

set_time_limit(900);

不推荐使用set_time_limit(0);,因为您的网络服务器可能会强制设置通常为 5 分钟左右的 HTTP 超时。

【讨论】:

    【解决方案2】:

    即使网络服务器(Apache、IIS...)也有超时设置,请尝试检查您的许多默认设置为 300 秒)。

    此外要小心设置时间限制。来自手册:'当 PHP 在安全模式下运行时,此功能无效。除了关闭安全模式或更改 php.ini 中的时间限制之外,没有其他解决方法。'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-29
      • 2018-04-07
      • 2013-07-24
      • 1970-01-01
      • 2014-05-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-17
      相关资源
      最近更新 更多