zoukankan      html  css  js  c++  java
  • 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='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."尝试登录");

  • 相关阅读:
    支持向量机(SVM)相关免费学习视频集锦
    《量化投资:以MATLAB为工具》连载(2)基础篇-N分钟学会MATLAB(中)
    《量化投资:以MATLAB为工具》连载(1)基础篇-N分钟学会MATLAB(上)
    OpenCV 轮廓基本特征
    !!破解灯塔线取点与画线的“难点”
    理工科应该的知道的C/C++数学计算库(转)
    521. 最长特殊序列 Ⅰ
    520. 检测大写字母
    459. 重复的子字符串
    443. 压缩字符串
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/9260685.html
Copyright © 2011-2022 走看看