我使用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语句。
任何解释都将不胜感激。
答案 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 { }
块。