接管PHP致命错误的方法

发布于 — 2014 年 11 月 12 日
#编程 #PHP #计算机

Yii 2.0引入了一项新特性,可以接管PHP的致命错误。在此之前,如果PHP源码有语法错误,框架本身是不会处理的。

实现的思路如下:

  • 禁止显示错误
  • 注册自定义的shutdown回调函数
  • 在回调函数中获取最近的错误
  • 若错误是致命错误,调用相应的处理逻辑

代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<?php

// ...

ini_set('display_errors', false);
register_shutdown_function(function(){
    $error = error_get_last();
    if (isset($error['type']) && in_array($error['type'], [E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING])) {
        ob_clean();
        echo '<pre>'; var_dump($error); echo '</pre>';
        exit(1);
    }
});

// ...

?>