(独孤九剑)--错误处理

(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("自定义错误");
    }
?>

 

posted @ 2018-03-19 14:20  剑仙6  阅读(191)  评论(0编辑  收藏  举报
欢迎访问个人网站www.qingchun.在线