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

Deadly 提交于 2019-12-05 00:50:29

问题


How can I test if exit is clean in a shutdown function in PHP?

By clean exit I mean that the script was not terminated due to an error.


回答1:


Its a good question, for the moment I only have this idea: register a shutdown function like this:

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

register_shutdown_function('shutdown');

With auto_append_file add an additional file to the very end of every script execution which sets an constant.

Your auto_append_file.php content:

define('END_REACHED', TRUE);

In case you dont want to edit the php.ini you could do check error_get_last() or $php_errormsg in your register shutdown function!




回答2:


A call to error_get_last() can tell you if or which error occurred. If the function returns NULL, it is a clean shutdown.




回答3:


There are lots of reasons a script might terminate prematurely. There is no generic solution. The only errors which will cause the script to terminate prematurely are fatal errors - and in most cases a shutdown function will not run after a fatal error, similarly a custom error handler will only reliably see non-fatal errors. Then there's the option of setting up signal handlers - but again they only see some of the story.

The big question of course, is what do you want to do with this information in the shutdown function?

The only reliable way to determine of your logic completed as expected is to raise a semaphore when this happens and check it in the shutdown function.




回答4:


I've ported (for PHP 5.3) ezcExecution component which handles this nicely. See https://github.com/sobstel/Execution. Basically you need to inform lib that exit was clean (by calling Execution::cleanExit(). Otherwise it means exit was not clean. Simple like that.



来源:https://stackoverflow.com/questions/7241541/how-to-check-if-exit-is-clean-in-a-shutdown-function-in-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!