尽管已被异常处理程序捕获,但仍显示PhP异常消息

时间:2013-11-27 17:43:36

标签: php mysql exception handler

我使用set_exception_handler()在我的PhP程序中设置了一个异常处理程序,它实际上工作正常。从某种意义上说,它确实捕获了我未能处理的异常,并且在处理程序中提供了异常详细信息。那么,我为什么抱怨?问题是除了在异常处理程序中记录文件名和行号的正确详细信息外,它还在浏览器中显示以下消息:

     Fatal error: Exception thrown without a stack frame in Unknown on line 0

我的信念是,这个特定的异常消息可能来自stdout流,而处理程序捕获的异常来自stderr流。另一种可能性是错误处理程序模块发出上述消息,而不是PhP的异常处理程序模块。无论如何,我希望所有异常消息都转到一个处理程序。我还有一个错误处理程序设置如下:

    set_error_handler('SS_error_handler', E_ALL); 

如何处理此类情况?致命错误消息是否来自PhP的错误消息报告模块?如果是这样,异常处理程序和错误处理程序之间是否存在重叠,因为它们都会在某些错误/异常上被触发?如果相关,我想补充一点,这个特定的异常被抛出是一个MySQL PDO语句。

任何解释都将不胜感激。

2 个答案:

答案 0 :(得分:0)

在导致错误的行的开头添加@字符,这会使其静音。

你也可以ini_set('display_errors',0),这将使每个人沉默:)

但通常的人只是try{} catch ( e) { trigger_error(e, E_USER_ERROR);}

答案 1 :(得分:0)

请参阅文档:http://php.net/manual/en/function.set-error-handler.php

  

使用用户定义无法处理以下错误类型   功能:E_ERROR,E_PARSE,E_CORE_ERROR,E_CORE_WARNING,   E_COMPILE_ERROR,E_COMPILE_WARNING和大多数E_STRICT在   调用set_error_handler()的文件。

因此,您不能使用set_error_handler来捕获异常,您应该使用正确的try { } catch { }块。