错误处理
错误分类
错误代号
错误触发
<?php
// php 错误处理
// 处理脚本让浏览器按照指定字符集解析的方法
header('Content-type:text/html;charset=utf-8');
$b = 0;
if($b == 0){
// 人为触发错误
trigger_error("除数不为0"); // 默认notice,代码会继续执行
trigger_error("error,代码不执行", E_USER_ERROR); // 代码不会执行
}
echo 2 / 0;
echo "ok!";
错误显示设置
在实际生产环境中,不会让错误赤裸裸的展示给用户:
- 不友好
- 不安全
故在生产环境中,一般不显示错误(错误比较少),因此将错误保存在日志中,需要在php配置文件(php.ini)或代码中进行配置。
- 开启日志功能
- 指定路径
自定义错误处理
- 创建自定义错误函数
- 修改系统错误机制
参考代码:
<?php
// 解决中文乱码问题
header('Context-type:text/html;charset=utf-8');
// 自定义错误处理机制
// 自定义函数
/*
@param1 $errno:系统提供的错误代码,如 E_ALL、E_NOTICE
*/
function my_error($errno, $errstr, $errfile, $errline){
// 判断:当前会碰到错误有哪些
// error_reporting没有参数代表获取当前系统错误处理对应的级别
if(!(error_reporting() & $errno)){ // 按位与 我们的错误代码如果在系统错误级别里 就继续执行,若没有则返回false
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 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; // 创造一个错误
// // 报错如下:
// Notice: Undefined variable: a in C:\Users\lisa\Documents\My\Learn_CodeTych\Vscode\php\ln_19_err_2.php on line 40
// 修改系统错误机制
set_error_handler('my_error');
echo $a;
// 报错
复杂的错误自定义模式:当某些影响代码功能的错误发生后,让用户跳转到某个指定页面。
<?php
// 解决中文乱码问题
header('Context-type:text/html;charset=utf-8');
// 自定义错误处理机制
// 自定义函数
/*
@param1 $errno:系统提供的错误代码,如 E_ALL、E_NOTICE
*/
function my_error($errno, $errstr, $errfile, $errline){
// 判断:当前会碰到错误有哪些
// error_reporting没有参数代表获取当前系统错误处理对应的级别
if(!(error_reporting() & $errno)){ // 按位与 我们的错误代码如果在系统错误级别里 就继续执行,若没有则返回false
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 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;
// 错误模式,跳转到某个页面
header('refresh');
break;
}
return true;
}
echo $a; // 创造一个错误
// // 报错如下:
// Notice: Undefined variable: a in C:\Users\lisa\Documents\My\Learn_CodeTych\Vscode\php\ln_19_err_2.php on line 40
// 修改系统错误机制
set_error_handler('my_error');
echo $a;
// 报错