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

2022-08-30 19:05:51

嗨,是否可以仅对命令或仅对函数设置时间限制,例如:

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

    function1();

    //.. some code here..

}

我只想将时间限制设置为函数1。

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


答案 1

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

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

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

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

<?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上,情况并非如此。


答案 2

如果您希望函数 1 在时间限制结束时返回,则需要自己编写代码。

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
}

当然,你所做的“事情”需要迭代,这样你就可以继续检查你经过的时间,并在必要时退出。

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


推荐