PHP错误处理笔记

1、错误分级

常量描述
1E_ERROR致命的运行时错误,脚本终止不再继续运行
2E_WARNING运行时警告 (非致命错误)。仅给出提示信息,但是脚本不会终止运行
8E_NOTICE运行时通知。表示脚本遇到可能会表现为错误的情况,但是在可以正常运行的脚本里面也可能会有类似的通知
256E_USER_ERROR用户产生的错误信息。类似 E_ERROR, 但是是由用户自己在代码中使用PHP函数 trigger_error()来产生的
512E_USER_WARNING用户产生的警告信息。类似 E_WARNING, 但是是由用户自己在代码中使用PHP函数 trigger_error()来产生的
1024E_USER_NOTICE用户产生的通知信息。类似 E_NOTICE, 但是是由用户自己在代码中使用PHP函数 trigger_error()来产生的
2048E_STRICT启用 PHP 对代码的修改建议,如:使用已过时的函数时STRICT信息会提出警告
8191E_ALLE_STRICT除外的所有错误和警告信息
省略其他很多不常用的错误

2、错误报告配置

  • 是否显示错误报告
    display_errors = on/off   开启/关闭显示错误报告

开发阶段都应该显示错误报告,上线阶段则不应该直接显示错误报告到页面上

  • 显示哪些级别的错误
    error_reporting = E_ALL|E_STRICT  显示所有级别的错误
    error_reporting = E_NOTICE     仅显示提示性E_NOTICE错误
  • 错误日志记录
    log_error = on/off   开启或关闭错误日志记录
  • 错误日志记录路径
    error_log=‘my_error.txt’  错误日志记录的路径

对应的脚本中,可用ini_set(‘php配置项’,‘值’);用于脚本设置php.ini中某项的值
ini_get(‘php配置项’);可用于获取php.ini中某项的值
脚本中的设置优先于php.ini的设置,但只会影响当前脚本

3、自定义错误处理

  • 自定义错误触发
    trigger_error(“错误信息内容”,3种用户错误代号之一)
if($age>127||$age<0){
	trigger_error("年龄不符合要求",E_USER_ERROR);
}
  • 自定义错误处理器
    set_error_handler(error_function[, error_types]):默认针对所有错误
    set_exception_handler(error_function):先定义function,在定义顶层的异常处理函数
    restore_exception_handler():还原成之前的异常处理程序
set_error_handler('my_error_handler');
/**
	$errCode:错误代号/级别
	$errMsg :错误信息内容
	$errFile:错误的文件名
	$errLine:错误的行号
*/
function my_error_handler($errCode,$errMsg,$errFile,$errLine){
	echo "错误代号为:$errCode,错误信息为:$errMsg,错误文件为:$errFile,错误行号为:$errLine";
}
  • 自定义错误处理类
class customException extends Exception //继承Exception
{
    public function errorMessage()
    {
        //定义错误信息
        $errorMsg = '错误消息的行:' . $this->getLine() . 'in' . $this->getFile() . '<b>' . $this->getMessage() . '</b>不是一个有效的邮箱地址';
        return $errorMsg;
    }
}

$email = 'yyfs@163.com';
try {
    //检查是否符合条件
    if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
        throw new customException($email);
    }
    //检查邮箱是否是163邮箱
    if (strpos($email, '163') === false) {
        throw new Exception("$email 不是163邮箱");
    }
} catch (customException $e) {
    echo $e->errorMessage();
} catch (Exception $e) {
    echo $e->getMessage();
}
  • error_log($errorMsg[, $type[, $destination[, $extra_headers]]]):将错误信息发送到某个地方
    参数:
    $errorMsg:要记录的错误信息
    $type:选择错误记录的类型
        0 - 默认。根据在 php.ini 文件中的 error_log 配置,错误被发送到服务器日志系统或文件
        1 - 错误被发送到 $destination参数中指定的邮箱地址, 第四个参数 $extra_headers 只有在这个类型里才会被用到
        2 - 不再是一个选项
        3 - 本地目录,错误发送到文件目标字符串
        4 - 发送到 SAPI 的日志处理程序中
    $destination:规定向何处发送错误消息,该参数的值依赖于 “type” 参数的值
    $extra_headers只在 “type” 参数为 1 时使用。规定附加的头部,比如 From, Cc 以及 Bcc。附加头部由 CRLF (\r\n) 分隔
    注意:在发送电子邮件时,必须包含 From 头部。可以在 php.ini 文件中或者通过此参数设置
//发送错误日志邮件
error_log("A custom error has been triggered", 1, "someone@example.com", "From: webmaster@example.com");
//记录到本地目录下
error_log("mysql connect failed", 3, "error.log");

4、错误捕获

  • 可以捕获Execption:异常,Error:Fatal错误,TypeError:类型错误,DivisionByZeroError:0为除数,ParseError:表达式错误等异常
  • 异常的函数:
    Exception::getMessage:获取异常消息内容
         getPrevious:返回异常链中的前一个异常
         getCode:获取异常码
         getFile:获取发生异常的程序文件名称
         getLine:获取发生异常的代码在文件中的行号
         getTrace:获取异常追踪信息
         getTraceAsString:获取异常追踪信息,字符串类型
try{
	$a = 20;
	$division = $a / 0;
	throw new Execption('你出BUG了!');
}catch(Execption $e){
	echo $e->getMessage();
}catch(DivisionByZeroError $e){
	echo $e->getMessage();
}finally{
	//这里的代码始终都会执行
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值