10.1.2 自定义PHP的错误报告处理方式

10.1.2 自定义PHP的错误报告处理方式

自定义错误报告的处理方式,可以完全绕过标准的PHP错误处理函数,这样就可以按自己定义的格式打印错误报告,或改变错误报告打印的位置,以下几种情况可以考虑自定义错误处理。
可以记下错误的信息,及时发现一些生产环境出现的问题
可以屏蔽错误。
可以控制错误的输出。
可以作为调试工具。
使用set_error_handler()函数来设置用户自定义错误处理。

<?php
    /**
        定义Error_Handler函数,
       作为set_error_handler()的第一个参数"回调"
        @param  int     $error_level  错误级别
        @param string $error_message  错误信息
        @param  string  $file            错误所在文件
        @param  int     $lin               错误所在行数
    */
    function error_handler($error_level,
     $error_message, $file, $line) {
          $EXIT = FALSE;
          switch( $error_level ) {
              //提醒级别
              case E_NOTICE:
              case E_USER_NOTICE :
                   $error_type = 'Notice'; break;
        
               //警告级别
              case E_WARNING:
              case E_USER_WARNING:
                   $error_type = 'Warning'; break;
                //错误级别
               case E_ERROR:
               case E_USER_ERROR:
                      $error_type = 'Fatal Error';
                      $EXIT = TRUE; break;
               
               //其他末知错误
               default:
                      $error_type = 'Unknown';
                      $EXIT = TRUE; break;
        }
        //直接打印错误信息,也可以写文件或数据库
        printf ("<font color='#FF0000'><b>%s</b></font>: %s in <b>%s</b> on line <b>%d</b><br>\n", $error_type, $error_message, $file, $line);
        
        //若出现错误则跳转到友好错误提示页面
        if(TRUE === $EXIT) {
           echo '<script>location="er.html" </script>';
        }
 }

error_reporting(0); //屏蔽程序中的错误
    
    set_error_handler('error_handler'); //这个才是关键点,把错误的处理交给error_handler()
    
    echo $novar; //使用末定义的变量要报 notice 的
    
    echo 3/0;  //除以0要报警告的
    
    trigger_error('Trigger a fatal error', E_USER_ERROR); //自定义一个错误
?>

通过上面测试代码可以很好解决安全和调试方面的矛盾,但注意
E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING是不会被这个句柄处理的,也就是会用原始的方式显示,不过通常情况下不会发生。
使用set_error_handler()后,error_reporting()将会失效。也就是所有错误都是由自定义的函数处理。

test.php

<?php
//  error_reporting(E_ALL & ~E_NOTICE);
    //在php中注册一个函数, 来处理错误报告, 而不按原来的方式处理了
    set_error_handler("myerrorfun");

    $mess = "";
    //自己的错误报告处理函数
    function myerrorfun($error_type, $error_message, $error_file, $error_line) {
    
        global $mess;
        $mess.="发生错误级别为{$error_type}类型, 错误消息<b>{$error_message}</b>, 在文件<font color='red'>{$error_file}</font>中, 第{$error_line}行。<br>";

        
    }



    getType($a);

    echo "1111111111111111<br>";

    getType();

    echo "222222222222222222222<br>";

//  getType3();

    echo "333333333333333333333<br>";


    
    echo "---------------------------------------------------------<br>";
    echo $mess;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • PHP错误简介 PHP提供了错误处理和日志记录的功能. 这些函数允许你定义自己的错误处理规则,以及修改错误...
    四月不见阅读 3,103评论 0 7
  • 简介 PHP提供了错误处理和日志记录的功能. 这些函数允许你定义自己的错误处理规则,以及修改错误记录的方式. 这样...
    零一间阅读 675评论 0 2
  • php.ini设置,上传大文件: post_max_size = 128Mupload_max_filesize ...
    bycall阅读 6,872评论 3 64
  • 此内容是对文件 zblogphp1.5.1\zb_system\function\c_system_debug.p...
    f675b1a02698阅读 483评论 0 0