PHP记录抛出的所有错误

时间:2017-05-05 08:05:11

标签: php

我想记录数据库 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]

1 个答案:

答案 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();
 }

?>