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

Gra*_*it 15 php time runtime execution limit

嗨有可能只为命令设置时间限制或仅设置功能,例如:

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

    function1();

    //.. some code here..

}
Run Code Online (Sandbox Code Playgroud)

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

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

Ali*_*man 20

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);
// ....
Run Code Online (Sandbox Code Playgroud)

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

  • 非常好!感谢名单!但如果未达到时间标准,则会返回致命错误.有没有办法避免这种情况. (3认同)

Pau*_*xon 8

如果希望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
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 在指定时间后,您无法退出任意功能.如果您确实需要这样做,请将其设计为单独的流程.然后,如果看起来花费太长时间,您可以关闭该过程. (4认同)

小智 6

$endtime=time()+10;

while(time()!=$endtime){

    echo ".";
}
Run Code Online (Sandbox Code Playgroud)