PHP set_time_limit()的范围是什么?

时间:2019-02-01 06:09:29

标签: php

我仍然不完全了解set_time_limit()的工作方式,并且文档中没有涉及范围。 可以说我有以下代码:

public function fetchSomething()
{
    //this runs for 10 seconds
    return $fetchedData;
}

public function doSomething()
{
    set_time_limit(101);
    //do stuff for 50 seconds
    $this->fetchSomething();
    //do stuff for another 50 seconds
}

由于doSomething()会运行50 + 10 + 50秒,或者doSomething()会运行50 + 50(而fetchSomething()单独计时),会不会超出时间限制并引发异常? >

3 个答案:

答案 0 :(得分:0)

它可以延长脚本的寿命-在脚本内部,从调用之时起,将有101秒的影响

答案 1 :(得分:0)

它设置允许脚本运行的秒数。如果达到此目的,脚本将返回致命错误。默认限制为30秒,如果存在,则为max_execution_time中定义的php.ini值。

被调用时,set_time_limit()从零重新启动超时计数器。换句话说,如果超时是默认的30秒,并且在脚本执行的25秒后进行了诸如set_time_limit(20)之类的调用,则该脚本将在超时之前总共运行45秒。

阅读正式文档:Here

答案 2 :(得分:-1)

根据the documentation

  

使用此功能时,脚本计时器将重置为0;否则,脚本计时器将重置为0。如果将时间限制设置为50,则在40秒后将时间限制设置为30,该脚本将总共运行70秒。也就是说,大多数网络服务器都有自己的时间限制,超过了PHP。在Apache中,这是在httpd.conf中的“超时”下设置的,默认值为300秒。如果您将set_time_limit()的值设置为大于Apache的超时值,则Apache将在PHP自身停止之前停止PHP。如果控制超出脚本范围,PHP可能会允许某些脚本超过时间限制。例如,如果您运行一个耗时100秒的外部程序,并且将时间限制设置为30秒,PHP将让脚本继续运行100秒,然后立即终止。如果使用的sleep()函数的值大于脚本执行的时间,也会发生这种情况。