PHP基础之错误

错误处理

1.概念:
系统在对某些代码执行的时候,发现有错误,就会通过错误处理的形式来告知程序员。

2.错误分类
(1)、语法错误:用户书写的代码不符合PHP的语法规范。会导致编译不通过(Parse error)
(2)、运行时错误:代码编译通过,但是在执行过程中会出现一些条件不满足导致的错误(runtime error)
(3)、逻辑错误:代码不够规范,出现了一些逻辑错误,导致代码正常执行,却得不到想要的结果。
最常见的就是把比较符号写成了逻辑符号

3.错误代号
注意:所有的错误代码在PHP中都被定义成系统常量(可以直接使用)
(1)、系统错误
E_PARSE:编译错误,代码不执行。
E_ERROR:fatal error,致命错误,代码会在出错的位置不再执行。
E_WARNING:warning,警告错误,不影响代码执行,但可能得到意想不到的结果。
E_NOTICE:notice,通知错误,不影响代码执行,影响美观。
(2)、用户错误:
E_USER_ERROR
E_USER_WARNING
E_USER_NOTICE
用户在使用自定义错误触发的时候,会使用的代码错误(系统不会用到)
(3)、其他错误:
E_ALL:代表所有错误,通常在进行错误控制时使用比较多,建议在开放过程(开放环境)使用。

所以以E开头的错误常量都是由一个字节存储的,然后每一种错误占据一个对应的位,如果想要进行一些错误的控制,可以进行位运算进行操作。
排除通知级别notice:E_ALL& ~E_NITICE
只有警告和通知:E_WARNING | E_NOTICE

4.错误触发
程序运行时触发:系统自动根据错误发生后,对比对应的错误信息,并反馈给用户,主要针对代码的语法错误和运行时错误
人为触发:知道某些逻辑可能会出错,而使用对应的判断代码来触发错误提升
在这里插入图片描述
trigger_error(错误提示):

<?php
header("content-type:text/html;charset=utf-8");
    $a=10;
    $b=0;
    if($b==0){
    	trigger_error("除数不能为0");
    }
    	 echo $a/$b;   
?>

输出
在这里插入图片描述
默认为notice,代码会继续执行,但是可以使用error,代码不会继续执行,看下面截图
在这里插入图片描述

5.错误显示设置
错误显示设置:哪些错误需要显示,该如何显示。
在PHP中,其实有2种方式来设置当前脚本的错误处理。
(1)、php的配置文件,全局配置;php.ini文件。
display_errors:是否显示错误
error_reporting:显示什么级别的错误
(2)、可以在php运行的脚本中去设;在脚本中配置项级别比配置文件高,前提是该脚本得运行。(通常在开发当中都会在代码中去进行控制)
error_reporting():可以设置对应的错误显示级别。
ini_set(‘配置文件中的配置项’,配置值)
如ini_set(‘error_reporting’,E_ALL)
ini_set(‘display_errors’,1) ;1就是开启的意思。
6.错误日志设置
在实际生产环境中,不会直接让错误赤裸裸的展示给用户看。
(1)、不友好
(2)、不安全,错误会暴露网站很多信息(路径,文件名)
所以在生产环境中一般不会显示错误(错误比较少),但是不可避免会出现错误(测试时未体现的问题),这个时候不希望看到,但是又希望捕捉到可以让后台程序员去修改,需要保存到日志文件中,需要在php配置文件中或代码(int_set)中设置对应的error_log配置项
开启日志功能
在这里插入图片描述
指定路径
在这里插入图片描述
7.自定义错误处理
最简单的错误处理:tigger_error()函数,但是该系统不会阻止系统报错。
PHP系统提供了一种用户处理错误的机制:用户自定义错误处理函数,然后将该函数增加在系统错误处理的句柄中,然后系统遇到错误之后,使用用户定义的错误函数。
(1)、如何将用户自定义的函数放到系统中呢?set_error_handle()
在这里插入图片描述
代码实现,
自定义错误处理函数,注意参数。

<?php
header("content-type:text/html;charset=utf-8");
    //自定义函数
    /*
       @param1 $errno是系统提供的错误代码:$E_ALL,E_NOTICE...
    */
    function my_error($errno,$errstr,$errfile,$errline){
    	//判断:当前会碰到错误有哪些
 		if(!(error_reporting() & $errno)){
 			//排除本身系统就要排除的错误
 			return false;
 			//error_reporting没有参代表获取当前系统错误处理对应的级别
 		}
 		//开始判断错误类型
 		switch ($errno) {
 			case E_ERROR:
 			case E_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 in 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 true;
    }
    //报错
    echo $a;
    //修改错误机制
    echo '<hr/>';
    set_error_handler('my_error');
    echo $a;
   
?>

输出
在这里插入图片描述
当前属于简单自定义模式,如果要复杂,可以在某些影响代码功能的错误发生后,让用户跳转到某个指定的界面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值