PHP错误处理留档
来源:互联网 发布:淘宝双11营业额直播 编辑:程序博客网 时间:2024/06/06 15:15
以前学的php错误处理
- 常见的错误级别
- 最低级别 deprecated
- 通知级别 notic
- 警告级别 warning(以上级别,程序还能继续往下运行)
- 最高级别 fatal error 和parse error(语法检测阶段)
- E_USER_相关错误
配置文件中和错误相关选项
开启配置错误选项
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 = Onerror_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:39Notice: 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() 在发生错误时,会调用注册的函数,给一次机会(回光返照的意思),来处理一些东西。
- PHP错误处理留档
- PHP 错误处理
- PHP 错误处理
- PHP 业务错误处理
- PHP 简单错误处理
- PHP 错误处理
- php 屏蔽错误处理
- PHP错误处理函数
- php错误处理相关
- PHP 错误处理
- PHP错误处理
- php错误处理、异常!
- PHP错误处理
- php错误处理
- PHP错误处理
- PHP 错误,异常处理
- PHP错误处理函数
- PHP错误处理
- jqprint 打印 table的一些坑
- 适用于Win7的MSXML程序包
- CSS样式选择器与常用的复合属性的设置
- html-学习笔记1
- netty源码分析(二十二)Netty编解码器剖析与入站出站处理器详解
- PHP错误处理留档
- python 可变参数 *arg **kwargs
- 服务状态
- Wannafly 挑战赛5 A 题 珂朵莉与宇宙 【思维 + 前缀和】
- 指数滑动平均(ExponentialMovingAverage)EMA
- 指针、引用或取地址
- struts2.5框架使用通配符指定方法(常见错误)
- C语言实现顺序表-数据结构
- java任务--过山洞多线程