PHP错误处理

错误处理

系统或用户在某些代码进行执行的时候,发现有错误,会通过错误处理的形式告知程序员。

 

错误分类

1、语法错误:

用户书写的代码不符合PHP的语法规范,会导致代码在编译过程中不通过,代码不执行(parse error)

2、运行时错误:

代码编译通过,但是代码在执行过程中会出现一些条件不满足,导致的错误(runtime error)

3、逻辑错误:

程序员在写代码的时候不够规范,出现了逻辑上的错误,代码可以正常执行,但是得不到想要的结果。

 

错误代号

所有看到的错误代码在PHP中都被定义成了系统常量,可以直接 访问/使用

1、系统错误:

E_PARSE:编译错误,系统不执行;

E_ERROR:fatal error,致命错误,代码不能正确继续执行(出错的位置断掉);

E_WARNING:警告错误,不影响代码执行,但是可能得到意想不到的结果;

E_NOTIC:通知错误,不会影响代码执行。

 

2、用户错误

E_USER_RROR,E_USER_WARNING,E_USER_NOTICE

用户在使用自定义错误触发的时候,会使用到的错误代号(系统不会用到)

3、其他

E_ALL:代表着所有错误(通常在进行错误控制的时候比较多),建议在开发环境中使用。

 

所有以E开头的错误常量(代号),其实都是由一个字节存储,然后每一种错误占据一个对应的位,如果想进行一些错误的控制,可以使用位运算进行操作。

排除通知级别notice:E_ALL & ~E_NOTICE;

只要警告和通知:E_WARNING | E_NOTICE;

 

错误触发:

程序运行时触发:

系统自动根据错误发生后,对比对应的错误信息,输出给用户:只要针对代码的语法错误和运行时错误;

人为触发:

知道某些逻辑可能会出错,从而使用对应的判断代码来触发响应的错误提示:

trigger_error(错误提示);

可以通过第二个参数进行严格性控制。

 

错误显示设置:

设置哪些错误该显示,以及如何显示;

在PHP中,有两种方式设置当前脚本的错误处理

1、PHP配置文件:全局配置:PHP.ini

Display_errors:是否显示错误

error_reporting:显示什么级别的错误

2、在运行的PHP脚本中设置,在脚本中定义的配置级别比配置文件高(通常在开发中会用代码去进行控制和配置)

error_reporting():设置错误显示级别;

ini_set('配置文件中的配置项',配置值);

ini_set('error_reporting',E_ALL);

ini_set('display_error',1);

 

错误日志设置

在实际生产环境中,不会把错误展示给用户:

1、不友好

2、不安全,会暴露网站很多信息(路径、文件名、规则)

所以在生产环境中,一般不显示错误,但是不可避免会出现错误(测试中未发现的问题),这个时候需要保留错误信息让后台修改,就把错误信息保存在日志文件中。

需要在PHP配置文件中或者代码中(ini_set)设置对应的error_log配置项:

I、开启日志功能

ini_set('log_errors',on);

II、指定路径

如:error_log = 'G:/wamp64/www/errlog/php_errors.log'

 

自定义错误处理

PHP自定错误处理函数,然后将该函数增加到系统错误处理的句柄中。系统会在碰到错误之后,使用用户自定义的错误函数。

1、将自定义函数加入系统中

set_error_handler();

2、自定义错误处理函数,系统的要求:

errno、errstr两个参数必须存在;

errfile、errline、errcontext 属于可选参数,取决于自定义函数是否需要该参数。

代码实现:

1、自定义错误处理函数(注意参数)

<?php

//自定义函数

function my_error($errno,$errstr,$errline){
    //判断:当前会碰到的错误有哪些

    if(!(error_reporting() & $errno)){       //判断错误类型,是否是被系统排除的错误 
    return false;
    }

//开始判断错误类型
switch($errno){
    case E_ERROR:                            //错误匹配
    case _USER_ERROR:                        //错误匹配
        echo 'fatal error in file' . $errfile . 'on line' . $errline . '<br/>';
        echo 'error info:' . $errstr;
        break;
    case E_WARNING:
    case E_USER_WARNING:
        echo 'Warning file' . $errfile . 'on line' . $errline . '<br/>';
        echo 'error info:' . $errstr;
        break;
    case E_NOTICE:
    case E_USER_NOTICE:
        echo 'notice in file' . $errfile . 'on line' . $errline . '<br/>';
        echo 'error info:' . $errstr;
        break;
    }
    return ture;
}

2、注册自定义函数:修改错误处理机制

set_error_hander('函数名');         例set_error_hander('my_error');

 

当前属于简单的自定义模式,还可以设置错误发生后跳转

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值