如何检查退出是否干净在一个关闭函数在PHP


how to check if exit is clean in a shutdown function in PHP?

如何在PHP中测试退出是否干净?

clean exit是指脚本没有因为错误而被终止。

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

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 !

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

当然,最大的问题是,您希望如何处理中的关闭函数中的这些信息?

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

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

我已经移植了(PHP 5.3) ezcExecution组件,它可以很好地处理这个问题。见https://github.com/sobstel/Execution。基本上,您需要通知lib退出是干净的(通过调用Execution::cleanExit())。否则就说明出口不干净。就这么简单。