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

Bea*_*sen 29 php die

我希望能够捕捉die()exit()留言.这可能吗?我希望类似的东西set_error_handlerset_exception_handler.我已经看过了,register_shutdown_function()但它似乎没有包含违规die()exit()调用的上下文.

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

小智 11

是的,你可以,但你需要ob_start,ob_get_contents,ob_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
Run Code Online (Sandbox Code Playgroud)


Ale*_*ing 7

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

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

似乎无法在退出($ status)中获取状态.除非你可以使用输出缓冲来捕获它,但我不知道你怎么知道何时打电话ob_start().

  • 我想OP的问题是他希望能够从关机功能中检索错误信息. (3认同)

Dr.*_*lle 5

如果APD可用,也许 override_function()可能很有趣


Bea*_*sen 4

据我所知,这实际上是不可能的。此处发布的一些解决方案可能有效,但它们需要大量额外的工作或许多依赖项。没有办法轻松可靠地捕获 die() 和 exit() 消息。