我希望能够捕获die()
和exit()
消息。这可能吗?我希望类似于set_error_handler
和set_exception_handler
的东西。我已经查看了register_shutdown_function()
,但它似乎不包含令人不快的die()
和exit()
调用的上下文。
我意识到die()
和exit()
是处理错误的坏方法。我不希望被告知不要这样做。:)我正在创建一个通用系统,希望能够优雅地记录exit()
和die()
,如果出于某种原因有人(不是我)认为这是一个好主意。
8条答案
按热度按时间tag5nh1u1#
是的,您可以,但是您需要ob_start、ob_get_contents、ob_end_clean和注册关闭函数
mrwjdhj32#
根据PHP manual,调用die()或exit()时仍应通知关断函数。
Shutdown functions和对象析构函数将始终执行,即使调用了exit()。
似乎不可能在exit($status)中得到状态信息,除非你可以使用输出缓冲来捕获它,但是我不知道你怎么知道什么时候调用
ob_start()
。hpcdzsge3#
如果APD可用,override_function()可能会很有趣
7uhlpewt4#
据我所知,这是不可能的。这里发布的一些解决方案可能有效,但它们需要大量额外的工作或许多依赖项。没有办法轻松可靠地捕获die()和exit()消息。
f4t66c6m5#
为什么不用自定义错误处理呢?如果不用,你可以使用LD_PRELOAD和C代码注入来捕获它:)或者用你的自定义重新编译php:P
4c8rllxm6#
如果您使用单点输入方法.(index.php),我建议您使用以下方法进行错误处理:
这大概是我的工作方式。我做的事情比这里展示的还要多(处理数据库事务/回滚/发送电子邮件/写日志/显示友好的错误消息/用户错误报告/等等),但这是所有这些事情背后的基本思想)。
希望能帮上忙。
e5nqia277#
可能会抛出一个运行时异常,而不是直接调用exit。
bkhjykvo8#
是的:编写一个函数并使用它。