6

如何在 PHP 的关闭函数中测试退出是否干净?

干净退出是指脚本没有因错误而终止。

4

4 回答 4

7

这是一个很好的问题,目前我只有这个想法:注册一个这样的关闭函数:

function shutdown() {
    if (defined('END_REACHED') {
        echo 'Script executed with no error', PHP_EOL;
    }
}

register_shutdown_function('shutdown');

auto_append_file每个设置常量的脚本执行的最后添加一个附加文件。

您的 auto_append_file.php 内容:

define('END_REACHED', TRUE);

如果您不想编辑 php.ini,您可以检查error_get_last()$php_errormsg在您的注册关闭功能中!

于 2011-08-30T10:14:12.777 回答
1

脚本可能过早终止的原因有很多。没有通用的解决方案。唯一会导致脚本过早终止的错误是致命错误 - 在大多数情况下,关闭函数在致命错误后不会运行,类似地,自定义错误处理程序只会可靠地看到非致命错误。然后是设置信号处理程序的选项 - 但同样他们只看到一些故事。

当然,最大的问题是,您想在关闭功能中使用这些信息做什么?

确定逻辑按预期完成的唯一可靠方法是在发生这种情况时引发信号量并在关闭函数中检查它。

于 2011-08-30T10:57:57.520 回答
1

调用error_get_last()可以告诉您是否发生了错误或发生了哪个错误。如果函数返回NULL,则表示完全关闭。

于 2013-11-05T19:26:37.360 回答
0

我已经移植(用于 PHP 5.3)ezcExecution 组件,它可以很好地处理这个问题。请参阅https://github.com/sobstel/Execution。基本上你需要通知 lib 出口是干净的(通过调用 Execution::cleanExit()。否则它意味着出口不干净。就像这样简单。

于 2011-11-16T00:30:13.193 回答