【问题标题】:user define function call at the time of set_time_limit PHP用户在 set_time_limit PHP 时定义函数调用
【发布时间】:2013-04-04 10:07:21
【问题描述】:

我想在固定时间段内运行文件。我可以为此使用 set_time_limit 函数。但我想在终止时调用一个函数。这个函数是必须调用的。否则我将无法再次运行此文件。

有没有办法在满足set_time_limit限制时在终止时调用函数?

【问题讨论】:

  • 您是在使用此脚本进行 Web 请求还是从命令行运行?

标签: php function user-defined-functions termination


【解决方案1】:

您可以使用register_shutdown_function设置脚本执行完成或调用exit函数时的回调函数。

【讨论】:

    【解决方案2】:

    你可以使用register_shutdown_function:

    <?php
    function shutdown() {
        // 3 seconds are over
        set_time_limit(0); // now we want no limit anymore
        echo "Shutdown!\n";
        while(true); // some other long action
    }
    error_reporting(0);
    set_time_limit(3);
    register_shutdown_function('shutdown');
    while(true); // some long action
    

    error_reporting 调用是为了避免超过时间限制时出现错误消息。

    【讨论】:

    • 感谢您的回答,但我有疑问,正如您在代码中提到的,set_time_limit 参数值为 3,这意味着文件将执行 3 分钟,并且在终止时将调用 register_shutdown_function。但是是什么使得现在可以运行回调函数,因为应用了时间限制。如果回调函数会运行很长的动作脚本会怎样。
    • @AbhimanyuSharma 这是一个很好的观点。我已经对此进行了测试,似乎只要调用回调函数,PHP解释器就会再次启动超时,因此关闭函数也最多运行3秒。您可以通过在关闭函数中调用set_time_limit(0) 来防止这种情况,该函数设置了无限时间限制。我已将此添加到我的答案中。但请注意,在关闭时执行长时间操作通常不是一个好主意,因为当脚本因超时以外的其他原因停止时也会运行回调!
    猜你喜欢
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 2015-09-21
    相关资源
    最近更新 更多