版权声明:未经同意,不得随意转载转载 https://blog.csdn.net/lucky541788/article/details/83028768
常见配置
- 在php.ini中,error_reporting控制输出到用户端的消息种类
- error_reporting = E_ALL; ——设置向PHP报告发生的错误类型
- display_errors = Off; ——设置错误是否显示在客户端
- log_errors = On; ——开启日志记录
- error_log = “D:\wamp64\logs\php_error.log”; ——错误日志记录文件
配置值
http://php.net/manual/zh/errorfunc.constants.php
除了在php.ini文件中可以调整错误消息的显示级别外,在php代码中也可以自定义消息显示的级别。使用error_reporting函数(动态改变上面error_reporting的值)。
/**
* 开发过程中,建议全部开启
* E_ALL
*
* 线上过程全部关闭
* error_reporting(0);
*/
error_reporting(E_ALL & ~E_NOTICE);//显示所有报错信息除了notice
error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);//显示所有报错信息,除了notice和warning
error_reporting(E_ALL ^ E_NOTICE);//显示所有报错信息除了notice
echo $t;//notice
echo 2 / 0;//warning
//phpinfo();//在Loaded Configuration File中查看php.ini位置
PHP中的错误处理
- 在php中,对于错误处理非常的宽松。php系统会尽量让程序运行下去,除非遇到致命错误。
- 直接打印一个未赋值变量$t时候,系统报出一个Notice,未定义变量。
- 做除以零的运算时,系统报出一个Warning,提示有除以零这样的警告,程序依然在运行。
- 当实例化一个不存在的类的时候,发生致命错误,程序终止运行。
自定义处理
- set_error_handler()函数向系统声明错误处理函数。
- 使用trigger_error()函数,可以触发一个error。
- 例如trigger_error(“你输入的年龄必须大于0”,E_USER_ERROR),触发自己的错误信息。
/**
* 自定义错误处理函数
*
* @param $errno int 错误类型
* @param $errmsg string 错误信息
* @param $errfile string 产生错误的文件
* @param $errline int 错误所在行
*/
function error_handler($errno, $errmsg, $errfile, $errline)
{
switch ($errno) {
case E_USER_ERROR:
echo '自定义错误处理类型: [' . $errno . '], 错误消息: ' . $errmsg . '<br>';
echo '产生的错误的文件: [' . $errfile . '], 所在行是: ' . $errline . '<br>';
break;
case E_WARNING:
echo '自定义的警告: [' . $errno . '], 错误消息: ' . $errmsg . '<br>';
echo '产生的错误的文件: [' . $errfile . '], 所在行是: ' . $errline . '<br>';
break;
case E_NOTICE:
echo '自定义NOTICE: [' . $errno . '], 错误消息: ' . $errmsg . '<br>';
echo '产生的错误的文件: [' . $errfile . '], 所在行是: ' . $errline . '<br>';
break;
default:
echo '未处理错误类型: [' . $errno . '], 错误消息: ' . $errmsg . '<br>';
echo '产生的错误的文件: [' . $errfile . '], 所在行是: ' . $errline . '<br>';
break;
}
}
set_error_handler('error_handler');
/**
* 自定义NOTICE: [8], 错误消息: Undefined variable: t
* 产生的错误的文件: [E:\desk\shan\QD-practice\php\cc.php], 所在行是: 39
*/
echo $t;
/**
* 自定义的警告: [2], 错误消息: Division by zero
* 产生的错误的文件: [E:\desk\shan\QD-practice\php\cc.php], 所在行是: 45
*/
echo 2 / 0;
/**
* 自定义错误处理类型: [256], 错误消息: 输入的年龄必须大于0
* 产生的错误的文件: [E:\desk\shan\QD-practice\php\cc.php], 所在行是: 54
*/
$age = -100;
if ($age < 0) {
//使用trigger_error()函数,可以触发一个error。
trigger_error('输入的年龄必须大于0', E_USER_ERROR);
}