用户在 set_time_limit PHP 时定义函数调用

Posted

技术标签:

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

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

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

【问题讨论】:

您是在使用此脚本进行 Web 请求还是从命令行运行? 【参考方案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) 来防止这种情况,该函数设置了无限时间限制。我已将此添加到我的答案中。但请注意,在关闭时执行长时间操作通常不是一个好主意,因为当脚本因超时以外的其他原因停止时也会运行回调!

以上是关于用户在 set_time_limit PHP 时定义函数调用的主要内容,如果未能解决你的问题,请参考以下文章

PHP函数set_time_limit(0)在空间上不起作用

PHP set_time_limit函数用法

php 超时 - set_time_limit(0); - 不工作

<?php set_time_limit(10);

因为php的set_time_limit在win下会失效,修改max_execution_time该值设置成很大,影响是啥

请问 设置了set_time_limit 为何页面还会 504错误?