zoukankan      html  css  js  c++  java
  • (独孤九剑)--错误处理

    (1)错误处理概论

    开发时显示错误能够帮助我们快速定位解决错误

    但在生产环境(即公网)给他人访问的网站、微网站、手机站等,若显示错误则很容易暴露相关信息

    ①服务器文件路径及文件存储规范;②mysql数据库服务器地址

    (2)禁止显示错误

    ①通过配置文件可以控制错误显示状态,(无法屏蔽语法错误)

    php.int中有专门配置项:display_errors,默认为on打开,也可以设置为off关闭。或者可以设置为0或1。

    关闭后不会在页面显示错误,但是有错误时会导致页面直接显示失败

    ②无法修改php.int时,使用int_set(),(无法屏蔽语法错误)

    <?php
        int_set('display_errors',0);
    ?>

    上面代码与关闭display_errors相同,但是仅仅在当前代码生效

    <?php
        ini_set('display_errors', 0);
        echo $a;//这里$a未定义,但不会报错
    ?>

    ③使用@屏蔽单条语句的错误(无法屏蔽语法错误)

    ④修改错误级别显示

    php.ini的error_reporting这个是修改错误级别显示,如果将级别设为最高等级的,则什么错误都不会显示在php.ini中找到error_reporting,去掉前面的分号(如果有),并将值改为0

    注意:这种方法会屏蔽所有错误,未定义、语法等

    (3)获取php.int配置项状态

    ini_get()函数获取配置项状态,例如

    <?php
        echo ini_get('display_errors');//输出1,此时会报错
        ini_set('display_errors', 0);//配置当前文件的报错
        echo ini_get('display_errors');//输出0,此时不会报错
    ?>

    (4)错误报告级别(错误类型)

    常用的有三种

    ①语法错误E_ERROR      

    这种错误是最为严重的,文件直接中断。只能改代码来解决,且一般屏蔽错误的语法无法屏蔽该级别的错误(error_reporting修改错误级别显示外)

     ②警告错误E_WARNING

    问题较为严重,但还会向下执行。可以通过@符来屏蔽

    ③注意错误E_NOTICE

    问题较轻,不会影响程序执行。常发生在项目未定义

    其他错误:

    不常见,且一般不会提示

    ①语法解析错误E_PARSE   

    编译时语法解析错误,仅仅由分析器产生

    ②所有错误E_ALL

    (5)错误报告

    error_reporting参数--报告错误类型,决定PHP引擎记录、报告、显示错误类型

    若error_reporting设置为0,则整个PHP引擎错误均不会显示、输出、记录。包括语法错误、警告错误、提示错误等

    也不会记录到日志里

    ①显示所有错误error_reporting = E_ALL;

    ②显示所有错误但排除提示error_reporting = E_ALL & ~ E_NOTICE;

    ③显示所有错误但排除提示error_reporting = E_ALL & ~ E_NOTICE ~ E_STRICT ~ E_DEPRECATED

    但是,无权操作php.int文件,又想要控制错误报告怎么办

    这时可以用error_reporting()函数来控制,注意这里虽然可以控制,但和php.int里相比,无法屏蔽语法错误

    (6)错误记录日志

    ①不让用户看到的情况下,将错误收集到日志系统。需要用到php.int的相关配置项

    log_errors      是否开启日志记录(on开启,off关闭)

    log_errors_max_len     单行错误最大记录长度(整型,默认1024)

    error_log                      错误日志存储路径(syslog或者指定路径)

    配置项里的syslog指系统记录,windows系统在电脑的日志收集器里记录,而Linux系统则默认在:/etc/syslog.conf系统目录下

    ②查看是否开启(0为关闭,1为开启)

    <?php
        echo ini_get('log_errors');
    ?>

    ③动态设置开关

    <?php
        ini_set('log_errors', 0);
        echo ini_get('log_errors');//设置了关闭,所以会输出0
    ?>

    ④自定义错误日志函数

    error_log( 错误消息,[错误消息类型],[存储目标] )

    该函数可以把错误信息发送到WEB服务器的错误日志,或者到一个文件里。

    常用的错误类型:

    0         发送至默认的error_log指定位置(默认)

    1         发送到指定的邮件位置

    3         发送到指定的文件位置(追加模式常用项

    <?php
        //无法连接到数据库服务器,直接记录到php.int的error_log指定位置
        error_log("无法连接到数据库服务器");
        //可以发送邮件,但php.int必须配置过邮件系统
        error_log("邮件发送报告错误,及时维修",'pig@php.cn');
        //记录到指定位置
        error_log("我是一个错误",3,"./error.log");
    ?>

    (7)自定义错误处理函数

    常用到的两个函数:

    set_error_handler(回调错误处理函数),主要用来设置一个用户自定义的错误处理函数

    trigger_error(错误信息),用来产生用户级别的错误提示信息

    <?php
        //自定义错误处理函数
        function customError($errno,$errstr,$errfile,$errline){
            //输出错误消息
            echo "错误消息[$errno]:$errstr<br>";
            //输出错误行
            echo "错误行$errline in $errfile";
            //终止运行
            exit();
        }
        //使用set_error_handler绑定用户自定义函数
        set_error_handler('customError');
        $test = 2;
        //触发自定义错误trigger_error
        if($test > 1){
            trigger_error("自定义错误");
        }
    ?>
  • 相关阅读:
    基于注解的springmvc开发
    判断两数之和
    redux-saga call 和 fork的区别
    滚动轴滚动方向判断
    原生方法scrollTo支持滚动特效
    npm下载包失败的几个原因
    关闭vscode打开新文件自动关闭预览文件功能
    在本地文件当中package.json的作用
    解决crlf 和 lf不同带来的冲突问题
    package-lock.json 文件的作用
  • 原文地址:https://www.cnblogs.com/fightjianxian/p/8601758.html
Copyright © 2011-2022 走看看