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

新手上路,请多包涵

您好,有没有可能只对一个命令或一个函数设置时间限制,例如:

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

    function1();

    //.. some code here..

}

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

存在 set_time_limit 但我认为这会设置整个脚本的时间限制。有人有什么想法吗?

原文由 Granit 发布,翻译遵循 CC BY-SA 4.0 许可协议

回复
阅读 68
2 个回答

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

原文由 Alister Bulman 发布,翻译遵循 CC BY-SA 2.5 许可协议

如果您希望 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
}

当然,您所做的“事情”需要反复进行,以便您可以不断检查已用时间并在必要时退出。

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

原文由 Paul Dixon 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏