PHP错误处理级别设置

php错误级别配置

常见的错误级别
最低级别 deprecated
通知级别 notic
警告级别 warning(以上级别,程序还能继续往下运行)
最高级别 fatal errorparse error(语法检测阶段)
E_USER_ 相关错误

配置文件中和错误相关选项

选项描述
error_reporting错误级别设置
display_errors是否显示错误
log_errors是否保存错误信息到日志中
error_log设置日志文件路径
ignore_repeared_errors是否忽略重复错误信息
ignore_repeared_source是否忽略重复错误信息的来源

开启配置错误选项

1.php.ini 配置 参数error_reporting配置错误级别和参数display_errors配置是否开启

error_reporting = E_ALL&~E_NOTICE等
display_errors = On/off

2.动态配置 通过error_reporting()函数或ini_set()函数

error_reporting();//获取当前错误级别的位掩码
error_reporting(E_ALL);//显示所有错误级别
error_reporting(-1);//显示所有错误级别
error_reporting(0);//屏蔽所有错误,但是不能屏蔽解析错误(parse error)

ini_set('error_reporting',0);//屏蔽所有错误,但是不能屏蔽解析错误(parse error)
ini_set('error_reporting',-1);//显示所有错误级别
ing_set('display_errors',0);//关闭错误

3. 错误抑制符@ 屏蔽错误信息

@settype($a,'baicai');//这行代码的错误就不会显示了

手动抛出错误

触发错误功能不只限于PHP解析器,还可以通过trigger_error()函数触发错误

$num1 = 'a';
$num2 = 1;
if( !(is_numeric($char)&&is_numeric($int)) ){
	echo trigger_error('num1和num2必须为合法数字',E_USER_NOTICE);
	//echo trigger_error('num1和num2必须为合法数字',E_USER_WARNING);
	//echo trigger_error('num1和num2必须为合法数字',E_USER_ERROR);
}else{
	echo $num1+$num2;
}

错误日志选项

1.将日志保存到指定的文件中

   改php.ini文件相关的参数

log_errors = On
error_log = 路径

测试

ini_set('display_errors','off');//关闭错误显示
error_reporting(-1);//开启所有错误级别
echo $test;
settype($a,'baicai');
test();

   动态配置

ini_set('display_errors','off');//关闭错误显示
ini_set('log_errors', 1);//开启错误日志
ini_set('error_log','c:\errors\testError.log');//配置错误日志路径
//测试
error_reporting(-1);//开启所有错误级别
echo $test;
settype($a,'baicai');
test();

一个小例子 跟踪用户登录操作

ini_set('display_errors',0);
ini_set('dete.timezone',PRC);
error_reporting(-1);
ini_set('log_errors', 1);
ini_set('error_log','./testError.log');
ini_set('ignore_repeated_errors','on');
ini_set('ignore_repeated_source','on');
$username = $_POST['username'];
$password = $_POST['password'];

 if($username=='baicai'&&$password=='baicai'){
 	echo "登录成功";
 }else{
 	$date = date('Y-m-d H:i:s');
 	$ip = $_SERVER['REMOTE_ADDR'];
 	$message= "用户{$username}{$date}以密码{$password}尝试登录系统,IP地址为{$ip}";
 	error_log($message);//发送错误信息到的上面指定的文件中
 	echo "error";
 }

2.将日志保存到系统日志中
ini_set('display_errors',0);
ini_set('log_errors', 1);
ini_set('error_log','syslog');//设置保存到系统日志
//测试
error_reporting(-1);开启所有错误级别
echo $test;
settype($a,'baicai');
test();
ini_set('display_errors',0);
ini_set('log_errors', 1);
ini_set('error_log','syslog');//设置保存到系统日志
error_reporting(-1);开启所有错误级别
//手动发送信息到系统日志
openlog('PHP5.5.12',LOG_PID,LOG_SYSLOG);
syslog(LOG_ERR, 'THIS IS A TEST OF SYSLOG'.date('Y-m-d H:i:s'));
closelog();

3.将错误信息发送到邮件(需要配置 用mail函数或者配置文件 然后结合seadmail 或者通过开源的邮件类库发送,像PHP Mailer或者SwiftMailer)
error_log('发送信息到邮箱',1,'baicai@baicai.com');

自定义错误处理

1.set_error_handler() 设置一个用户定义错误处理函数 接管php错误的处理,按照我们的需求自定义我们的错误处理形式

注释:如果使用该函数,会绕过标准 PHP 错误处理程序,同时如果必要,用户定义错误程序通过 die() 终止脚本。

注释:如果错误发生在脚本执行之前(比如文件上传时),将不会调用自定义的错误处理程序因为它尚未在那时注册。

如果函数返回 FALSE ,标准错误处理程序将会继续调用。

步骤:
1.创建错误处理函数
2.设置不同级别调用函数
3.set_error_handler()函数指定接管错误处理

error_reporting(-1);
function customeError($errno,$errormsg,$file,$line){
	echo "错误代码:[{$errno}] {$errormsg}<br/>".PHP_EOL;
	echo "错误行号:{$file}文件中的第{$line}行<br/>".PHP_EOL;
	echo "PHP版本:".PHP_VERSION."(".PHP_OS.")<br/>".PHP_EOL;
}
set_error_handler('customeError');
echo $test;

结果

错误代码:[2] settype(): Invalid type

错误行号:H:\php\error.php文件中的第39行

PHP版本:5.5.12(WINNT)

错误代码:[8] Undefined variable: test

错误行号:H:php\error.php文件中的第40行

PHP版本:5.5.12(WINNT)

如果不用自定义错误处理 走标准错误处理程序

error_reporting(-1);

/**
 * [customeError 函数]
 * @param  [int] $errno    [错误号]
 * @param  [string] $errormsg [错误信息]
 * @param  [string] $file     [错误文件]
 * @param  [int] $line     [错误行号]
 * @return void
 */
function customeError($errno,$errormsg,$file,$line){
	echo "错误代码:[{$errno}] {$errormsg}<br/>".PHP_EOL;
	echo "错误行号:{$file}文件中的第{$line}行<br/>".PHP_EOL;
	echo "PHP版本:".PHP_VERSION."(".PHP_OS.")<br/>".PHP_EOL;
}
//set_error_handler('customeError');
echo $test;

结果

Warning: settype(): Invalid type in H:\php\error.php on line 39
Call Stack:
0.0002 234448 1. {main}() H:\php\error.php:0
0.0002 235024 2. settype() H:\php\error.php:39

Notice: Undefined variable: test in H:\php\error.php on line 40 Call
Stack:
0.0002 234448 1. {main}() H:\php\error.php:0

2.restroe_error_handle() 回收自定义错误处理函数。
3.register_shtudown_function() 在发生错误时,会调用注册的函数,给一次机会(回光返照的意思),来处理一些东西。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值