我想将所有PHP错误记录到数据库中,所有错误都带有堆栈跟踪。但PHP手册的片段让我感到困惑:
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");
我目前使用传递给"set_error_handler()"的函数将错误记录到数据库中。但是,如果我使用上面的代码,我应该把写错误和堆栈跟踪到数据库的代码放在哪里
function error_handler($errno, $errstr, $errfile, $errline){
$err = array(
'errno' => $errno,
'errstr' => $errstr,
'errfile' => $errfile,
'errline' => $errline
);
DB::insertAssoc('table_error', $err);
}
处理异常时,需要使用try {/* code */} catch (Exception $error) {/* handle exception code*/}
。试试这个:
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
function error_handler($errno, $errstr, $errfile, $errline){
$err = array(
'errno' => $errno,
'errstr' => $errstr,
'errfile' => $errfile,
'errline' => $errline
);
DB::insertAssoc('table_error', $err);
}
set_error_handler("exception_error_handler");
try {
$q/1;
} catch (ErrorException $e) {
error_handler(
$e->getSeverity(),
$e->getMessage(),
$e->getFile(),
$e->getLine()
);
}
你可以在这里阅读更多关于在Php中处理异常的信息:http://www.php.net/manual/en/language.exceptions.php