美文网首页
10.1.2 自定义PHP的错误报告处理方式

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

作者: 曹渊说创业 | 来源:发表于2016-12-22 08:19 被阅读90次

    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;
    
    

    相关文章

      网友评论

          本文标题:10.1.2 自定义PHP的错误报告处理方式

          本文链接:https://www.haomeiwen.com/subject/htucvttx.html