错误处理
错误分类
1)语法错误:Parse error
2)运行错误:runtime error
3)逻辑错误:代码正常运行,但得不到正常结果
错误代号
1)系统错误:
E_PARSE:编译错误
E_ERROR:致命错误 fatal error
E_WARNING:警告错误 warning error
E_NOTTICE:通知错误 notice
2)用户错误:
E_USER_ERROR
E_USER_WARNING
E_USER_NOTTICE
3)其他:
E_ALL
所有E开头的错误常量(代号)都是一个字节,然后一种错误占据一个对应的位,如果想进行一些错误的控制,可以使用位运算进行操作
错误触发
1)程序运行时触发
2)人为触发:
$a=5;
$b=0;
if($b==0){
//人为触发
trigger_error('人为触发错误!');//默认notice ,会继续执行
}
echo $a/$b;
if($b==0){
//人为触发
trigger_error('人为触发错误!',E_USER_ERROR);//默认notice ,会继续执行
}
echo $a/$b;
错误设置
错误显示设置
1)PHP配置文件:
全局配置 php,ini
display_error
2)运行在PHP脚本设置
error_reporting():设置对应错误显示级别
Ini_set(‘配置文件中的配置项’,配置项)
Ini_set(‘error_reporting’,E_ALL)
Ini_set(‘display_errors’,1)
错误日志设置
需要在PHP配置我文件中或者代码中(ini_set)设置对应的error_log配置项,并且开启错误日志的功能log_errors=on
错误自定义处理
最简单处理:trigger_errors()函数,该函数不会阻止系统报错
mixed
1)将用户自定义函数放在系统中set_error_handler()
2)自定义错误处理,注册自定义函数(修改错误处理机制)
代码实现:
//自定义错误机制
/*自定义函数
@param $errno ,时系统提供的错误代码:E_ALL,E_NOTICE
*/
header('Content-type:text/html;charset=utf-8')
function my_error($errno,$errstr,$errfile,$errline){
//判断:当前会碰到错误有哪些
if(!(error_reporting() &errno)){//排除系统本身错误
return false;
}
//开始判读错误类型
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 error 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;
//修改错误机制
set_error_handler('my_error');
echo $a;