【发布时间】:2012-12-15 17:43:36
【问题描述】:
这周我遇到了一些小问题。前面的错误消息是关于:
[2012 年 12 月 30 日 15:19:32] PHP 致命错误:在第 0 行的未知中抛出没有堆栈帧的异常
我认为这是因为我的错误处理程序(详见下文)正在将任何错误转化为异常。如果没有堆栈框架,我可能应该阻止这种情况。
有没有一种简单的方法可以找出 PHP 中是否有任何堆栈帧?
详情:
在我的一个网站上,我运行了一个错误处理程序,它将每个错误都转换为异常,准确地说是常见的ErrorException。
我前段时间介绍了它,因为该站点主要是遗留代码,我希望有任何问题导致异常,我最终可以以简化的方式“捕获”异常处理程序并停止请求。
我把它放到它自己的类中,注册处理程序,同时打开一个输出缓冲区来捕获输出,直到抛出异常。基本上是这样的代码:
// register output buffering
$r = ob_start(array($this, 'handleBuffer'));
// register error handler
$this->_originalErrorHandler = set_error_handler(array($this, 'handleError'));
// register exception handler
$this->_originalExceptionHandler = set_exception_handler(array($this, 'handleException'));
在我决定添加另一个输出缓冲类之前,这一切都很好。只有一个能够捕获所有输出,然后可以在网站上进行一些“后期制作”,包括检查 HTML 问题(是的,这都有点遗留,所以实际上这有点老套,我知道)。顺便说一句,这也很好用。但是当我在新组件中犯了一个错误时不会:
[2012 年 12 月 30 日 15:19:32] PHP 致命错误:在第 0 行的未知中抛出没有堆栈帧的异常
这基本上是我的问题。有没有一种简单的方法可以防止出现这些错误?我有点知道为什么会出现错误,但我不太确定,所以我很难真正规避这个问题。我试图在脚本进入新的关闭阶段之前释放新的输出缓冲区,因为我认为这会导致这种情况。但这并没有成功。
【问题讨论】:
标签: error-handling shutdown php