这一周我遇到了一个小问题。前面的错误消息是关于:
[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 行的未知中抛出没有堆栈帧的异常
这基本上是我的问题。有没有一种简单的方法可以防止出现这些错误?我有点知道为什么会出现错误,但我不太确定,所以我很难真正规避这个问题。我试图在脚本进入新的关闭阶段之前释放新的输出缓冲区,因为我认为这会导致这种情况。但这并没有成功。