我想记录数据库中 PHP 引发的所有错误。如何获取变量中的所有错误。
在以下代码中,未声明的$ a已打印。但它没有抓住。
$error = "";
try
{
echo $a; // not declared
}
catch(Exception $e)
{
$error = $e->getMessage();
}
输出
Notice (8): Undefined variable: a [APP\Controller\CronJobsController.php, line 71]
答案 0 :(得分:1)
通知不是例外,因此无法在Try {} Catch {}块中捕获。与警告类似。
通常更好的做法是启用error_reporting级别,以便它们在您的开发环境中显示这些级别,这样您就可以在编码时处理这些问题。
但是,要捕获它们并以另一种方式处理它们,您需要设置自定义错误处理程序。您可以让自定义错误处理程序仅捕获某些错误。
<?php
// set custom handler for NOTICES
// $oldHandler will allow you to reset the handler back to PHP default later
$oldHandler = set_error_handler('myErrorHandler', E_NOTICE|E_WARNING);
function myErrorHandler($errno, $errstr, $errfile, $errline) {
// log to DB in here
// $db->query("INSERT INTO error_log (errno, errstr... ) VALUES (...)");
// return false to let the error bubble up and get caught by default error handler
// return false;
// return true to tell PHP you've dealt with it
return true;
}
// YOUR SAMPLe CODE SHOULD NOW CAPTURE THE NOTICE
$error = "";
try
{
echo $a; // not declared
}
catch( \Error $e)
{
$error = $e->getMessage();
}
?>