我使用以下函数来设置错误控制:
set_error_handler
set_exception_handler
发生错误时,它会调用此函数捕获错误并将其存储到数据库,然后再将用户重定向到通用页面
function log_error($exception)
{
if(is_object($exception))
log_action(ERROR, "Exception with message " . $exception->getMessage() . " thrown in " . $exception->getFile() . " on line " . $exception->getLine(), base_url() . $_SERVER["REQUEST_URI"]);
else
log_action(ERROR, "Unable to catch exception. print out: " . print_r($exception, true), base_url() . $_SERVER["REQUEST_URI"]);
header("Location: " . base_url() . "public_error_notification");
}
这通常有效,除了很多次而不是获取错误对象,我只是得到一个数字。我一直得到的两个数字是8和2.您可以看到我在错误日志中记录了这些数字。我的问题是,这些数字意味着什么?当我查找它时,它是有道理的,因为文件有错误代码,但我现在得到的错误与文件无关。我假设它们是错误代码,那么有什么办法可以获得可以返回的错误代码列表吗?
答案 0 :(得分:2)
error_handler
回调采用带有此签名的函数:
handler ( int $errno , string $errstr [, string $errfile [, int $errline [, array $errcontext ]]] )
第一个参数是错误编号,第二个参数是描述错误的字符串。
同时,exception_handler
具有此签名的功能:
handler ( object $exception )
第一个也是唯一一个参数是一个包含抛出异常细节的对象。
您遇到的问题是异常和错误没有相同的回调签名。当你正确处理异常时,你正在使用不适当的回调来处理错误。
当您看到8
和2
这样的数字时,您会发现错误,当您看到异常对象时,您将捕获异常。
答案 1 :(得分:2)
似乎你对异常处理程序和错误处理程序使用相同的回调,它们不传递相同类型的参数。
看看set_error_handler doc,第一个参数是错误代码,第二个是错误字符串。没有传递对象
http://php.net/set_error_handler
对于错误代码,请检查:
答案 2 :(得分:1)
我只想补充一点,你得到的数字是引发的错误级别,在php中为它们定义了一些内容,例如E_USER_ERROR,E_USER_WARNING,E_USER_NOTICE。