限制函数或命令PHP的执行时间

时间:2009-07-24 08:57:25

标签: php time runtime limit execution

您可以将时间限制仅设置为命令或仅设置为功能,例如:

function doSomething()
{
    //..code here..

    function1();

    //.. some code here..

}

我想只为function1设置时间限制。

退出set_time_limit但我认为这设置了整个脚本的时间限制。 有人有想法吗?

6 个答案:

答案 0 :(得分:19)

set_time_limit()确实全局运行,但可以在本地重置。

  

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

     

调用时,set_time_limit()从零重启超时计数器。在   换句话说,如果超时是默认的30秒和25秒   在脚本执行中,调用诸如set_time_limit(20)之类的脚本   在超时之前总共运行45秒。

我没有测试过,但你可以在本地设置它,当你离开时重置

<?php
set_time_limit(0);  // global setting

function doStuff()
{
    set_time_limit(10);   // limit this function
    //  stuff
    set_time_limit(10);   // give ourselves another 10 seconds if we want
    //  stuff
    set_time_limit(0);    // the rest of the file can run forever
}

// ....
sleep(900);
// ....
doStuff();  // only has 10 secs to run
// ....
sleep(900);
// ....

set_time_limit() ... 任何花在执行脚本执行之外的活动,例如使用system()的系统调用,流操作,数据库查询等都不包括在确定脚本运行的最长时间。在测量时间真实的Windows上,情况并非如此。

答案 1 :(得分:9)

如果你希望在时间限制结束时返回function1,你需要自己编码。

function doStuff($seconds)
{
    $finish=time()+$seconds;

    $done=false;
    $timeout=false;

    while (!$done && !$timeout)
    {
        //do stuff here, set $done to true if you complete

        //out of time?
        $timeout=time() >= $finish;

    }

    return $done; //let caller know if we completed
}

当然,你所做的“东西”需要迭代,以便你可以继续检查你的经过时间,并在必要时退出。

如果您想要任意函数的超时执行并且返回控制权,则不支持。如果您确实需要这样做,请将其设计为单独的流程。然后你可以关闭这个过程,如果它似乎花了太长时间。

答案 2 :(得分:6)

$endtime=time()+10;

while(time()!=$endtime){

    echo ".";
}

答案 3 :(得分:3)

不,这是不可能的:max_execution_time被用作安全措施,以避免有错误的脚本(如无限循环)破坏服务器;但它并不打算在功能单元的基础上工作。

最终导致致命错误这一事实对用户来说绝对不是很好......

答案 4 :(得分:1)

我使用exec运行从外部应用程序生成导出的shellscript。如果脚本运行时间太长,则达到max_execution_time,用户永远不会知道发生了什么。这种功能的限制将帮助我确定是否接近结束并发送一些用户友好的错误。

答案 5 :(得分:0)

我不认为这是可能的,但你为什么要这样做?如果一个脚本被中断,我可能不希望你想要它。这应该更像是对自己的保护(以防您上传无限循环或需要花费数小时的事情),但如果您的脚本需要花费大量时间,您应该给它花费时间,或者更改脚本所以它运行得更快(对于一些crons,它可以花一些时间,但如果一个普通的脚本经常需要超过默认时间限制,你可能会面临一些严重的性能问题)