如何在PHP的关闭函数中测试退出是否干净?
所谓干净的退出是指脚本没有因错误而终止。
这是一个好问题,目前我只有这个想法:注册一个关机函数,像这样:
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
!
auto_append_file
也可以通过 .htaccess 进行修改。 - powtac脚本可能会提前终止的原因有很多,但没有通用的解决方案。唯一会导致脚本提前终止的错误是致命错误 - 在大多数情况下,致命错误发生后关机函数将不会运行,同样,自定义错误处理程序只能可靠地查看非致命错误。然后还有设置信号处理程序的选项 - 但它们只能看到部分故事。
当然,最重要的问题是,在关机函数中,您想要用这些信息做什么?
确定逻辑是否按预期完成的唯一可靠方法是在此发生时引发信号量,并在关机函数中进行检查。
我已经移植了(适用于PHP 5.3的)ezcExecution组件,可以很好地处理这个问题。请参见https://github.com/sobstel/Execution。基本上,您需要通知库退出是干净的(通过调用Execution::cleanExit())。否则,这意味着退出不干净。就这么简单。
debug_backtrace()
时,它不会跟踪到其后面的内容。 - Dan Luggexit()
函数可以带有状态码参数。这个状态码可以在另一个脚本中使用,例如当您使用exec()
或passthru()
运行脚本时(甚至在使用多线程时也是如此)。 - y_a_v_a