是否可以捕获文件中发生的所有 PHP 错误

aze*_*zer 5 php error-handling

我想捕获页面中的所有 PHP 错误(E_ERROR、E_WARNING、E_NOTICE,..)并将其记录到 MongoDB,以便更好地阅读和评论。

我找到了一种方法来捕获最后发生的错误 'error_get_last' 并将其发送到我想要的任何地方 'register_shutdown_function'使用 register_shutdown_function() 处理 PHP 中的致命错误

但是,如果我的文件有多个错误(例如警告和通知)怎么办?如何获取文件中的所有错误?这可能吗?我需要的是类似“error_get_all”的东西。

在这里你可以找到我的代码,该代码有一个致命错误,两个警告和一个通知:

function shutdown() {
  $error = error_get_last();
  if ($error['type'] === E_ERROR || $error['type'] === E_WARNING || $error['type'] === E_NOTICE) {
    var_dump($error);
  }
}

register_shutdown_function('shutdown');

spl_autoload_register('foo');

$x = 5;
$y = 0;

echo 'x/y: ' . $x / $y . '<br/>';

foreach ($noarray as $noelement) {
  echo 'no element: ' . $noelement . '<br/>';
}
Run Code Online (Sandbox Code Playgroud)

Ing*_*Ing 5

答案是结合解决方案:

使用“set_error_handler”来捕获所有可能的错误(请参阅http://php.net/manual/en/function.set-error-handler.php),以及使用所描述的register_shutdown_function来记录遗漏的错误这样。

通过这样做,自定义处理程序将捕获运行时期间的非致命错误,并继续执行,直到脚本结束或发生致命错误,该错误将由自定义或关闭函数捕获,具体取决于类型。