我可以捕获 exit() 和 die() 消息吗?

2022-08-30 14:20:11

我希望能够捕获和消息。这可能吗?我希望有类似于 和 .我已经看过了,但它似乎不包含冒犯和电话的上下文。die()exit()set_error_handlerset_exception_handlerregister_shutdown_function()die()exit()

我意识到这一点,并且是处理错误的不良方法。我不想被告知不要这样做。:)我正在创建一个通用系统,并希望能够优雅地记录,如果由于某种原因有人(不是我)决定这是一个好主意。die()exit()exit()die()


答案 1

是的,你可以,但你需要ob_startob_get_contentsob_end_cleanregister_shutdown_function

function onDie(){
    $message = ob_get_contents(); // Capture 'Doh'
    ob_end_clean(); // Cleans output buffer
    callWhateverYouWant();
}
register_shutdown_function('onDie');
//...
ob_start(); // You need this to turn on output buffering before using die/exit
@$dumbVar = 1000/0 or die('Doh'); // "@" prevent warning/error from php
//...
ob_end_clean(); // Remember clean your buffer before you need to use echo/print

答案 2

根据 PHP 手册,当调用 die() 或 exit() 时仍应通知关闭函数。

关闭函数对象析构函数将始终执行,即使调用了 exit()。

似乎不可能在 exit($status)中获取状态。除非您可以使用输出缓冲来捕获它,但我不确定您如何知道何时调用 。ob_start()


推荐