PHP的错误处理

一、PHP的错误分类

  1.语法错误

    语法错误不会执行PHP脚本文件中的任意代码

  2.运行时错误

    在代码执行的过程当中发生的错误

  3.逻辑错误

    不会发生语法错误,不会发生运行时错误,会显示错误的结果

    通常情况下,这种错误最难排错

二、错误报错级别

  级别常量      错误值      错误报告描述

  E_ERROR      1         致命的运行时错误(阻止脚本执行)

  E_WARNING      2        运行时警告(非致命性错误)

  E_PARSE        4        从语法中解析错误

  E_NOTICE      8        运行时注意消息(可能是或可能不是一个问题)

  E_CORE_ERROR  16        PHP启动时初始化过程中的致命错误

  E_CORE_WARNING  32       PHP启动时初始化过程中的警告(非致命性)

  E_COMPILE_ERROR   64       编译时致命错误

  E_COMPILE_WARNING  128        编译时警告(非致命性)

  E_USER_ERROR    256        用户自定义的致命错误

  E_USER_WARNING   512       用户自定义的警告

  E_USER_NOTICE        1024       用户自定义的提醒(经常是bug)

  E_STRICT        2048      编码标准化警告(建议如何修改以向前兼容)

  E_ALL         6143      所有的错误、警告和注意信息

三、更改错误报告级别

  1.PHP的配置文件php.ini中:

    display_errors=On/Off (是否显示错误报告)

    error_reporting=E_ALL (更改要显示的错误报告级别)

  2.在代码中修改:

    ini_set('display_errors','off');

    error_reporting(0); / error_reporting(E_ALL);

四、用户自定义错误报告的处理方式

  ①trigger_error('提示信息',E_USER_ERROR/WARNING/NOTICE);

  ②set_error_handler(回调函数):

    回调函数所需的参数:

      errorno:错误报告级别的常量值

      errorstr:错误信息

      errorfile:错误发生的文件

      errorline:错误发生的行号

    注意:当前文件每发生一次错误,都会调用一次该回调函数

    例:

      set_error_handler('myerror');

      function myerror($errorno,$errorstr,$errorfile,$errorline){

      }

  set_error_handler('myerrors');
    function myerrors($errorno,$errorstr,$errorfile,$errorline){
        switch ($errorno) {
            case 1:
                $str='致命错误';
                break;            
            case 2:
                $str='警告错误';
                break;
            case 4:
                $str='解析错误';
                break;
            case 8:
                $str='注意';
                break;
        }
        $str.=':'.$errorstr;
        $str.="<br>发生在文件:".$errorfile."的第".$errorline."行";
        echo "<div style='width:400px;height:100px;border:1px dashed gray;overflow:auto;padding:10px;position:fixed;right:10px;bottom:10px;'>{$str}</div>";
    }

五、保存错误日志到指定文件中

  代码中设置:

  ini_set('error_reporting','E_ALL');  //不可关闭错误报告级别,否则系统的错误报告不会写入日志文件

  ini_set('display_errors','off');  //关闭以避免系统错误报告在界面的显示

  ini_set('log_errors','on');  //开启外部保存错误信息

  ini_set('error_log','D:/error.log');  //设置保存的位置

 

  //代码中使用函数error_log()即可将错误信息写入到D:/error.log文件中

  //也可在set_error_handler()的回调函数中使用函数error_log()

  error_log('自定义错误信息');

  例:

    error_log("IP地址为:".$_SERVER['REMOTE_ADDR']."的主机在时间:".date('Y-m-d H:i:s')."以用户名:".$username.",密码:".$password."尝试登录");

posted @ 2018-07-03 21:18  Autumn_n  阅读(141)  评论(0编辑  收藏  举报
TOP