常见错误处理类型 语法错误
环境错误
逻辑错误
常见错误级别 deprecated 最低级别的错误
不推荐,不建议,使用一些过期函数的时候会出现,程序继续执行
notice 通知级别的错误
使用一些未定义变量、常量或者数组key没有加引号的时候会出现,程序继续执行
waning 警告级别的错误
程序出问题了,需要修改代码!!!程序继续执行
fatal error 错误级别的错误
程序直接报错,需要修改代码!!!中断程序执行
parse error 语法解析错误
语法检查阶段报错,需要修改代码!!!中断程序执行
e_user_相关的错误
用户定义的错误,用户手动抛出错误,进行自定义错误处理
php配置文件和错误相关选项 设置错误级别
1、通过修改php.ini文件设置错误级别,静态设置,需要重启apache
// error_reporting = e_all&~e_notice; //显示所有错误,除了e_notice级别
// display_errors = 1; //线下开启,先上关闭
2、通过error_reporting()函数设置,动态设置
// error_reporting(e_all&~e_notice); //显示所有错误,除了e_notice级别
// error_reporting(0); //屏蔽所有错误,只会显示语法解析错误
// erorr_reporting(-1); //显示所有错误
3、通过ini_set()函数进行运行时设置,动态设置
// ini_set('error_reporting',0);
// ini_set('error_reporting',-1);
// ini_set('display_errors',0);
使用triggerr_error进行错误抛出
代码继续执行';
记录错误 配置php.ini脚本设置记录错误
log_errors = on //是否将产生错误信息记录到日志或者error_log中
;error_log = syslog //设置脚本错误将记录到系统日志中
log_errors_max_len = 1024 //设置错误报错最大值,单位字节
ignore_repeated_errors = off //是否忽略重复的错误信息
ignore_repeated_source = off //是否忽略重复错误消息的来源
track_errors = on //如果开启,最后一个错误将永远保存在$php_errormsg中
将错误记录到指定的文件中
将日志文件保存到系统日志中
line = $line; $this->vars = $vars; } public static function deal($errno,$errmsg,$filename,$line,$vars){ $self = new self($errmsg,$filename,$line,$vars); switch ($errno) { case e_user_error : return $self->dealerror(); break; case e_user_warning : case e_warning : return $self->dealwarning(); break; case e_notice : case e_user_notice : return $self->dealnotice(); break; default: return false; break; } } /** * 处理致命错误 * @return [type] [description] */ public function dealerror(){ ob_start(); debug_print_backtrace(); $backtrace = ob_get_flush(); $errmsg = line}追踪信息:{$backtrace}eof; //发送邮件的错误日志 //error_log($errmsg,1,'87399497@qq.com'); //记录到错误日志 error_log($errmsg,3,'d:/logs/customer_error.log'); exit(1); } /** * 处理警告错误 * @return [type] [description] */ public function dealwarning(){ $errmsg = line}eof; error_log($errmsg,3,'d:/logs/customer_warning.log'); } /** * 处理通知级别的错误 * @return [type] [description] */ public function dealnotice(){ $date = date('y-m-d h:i:s',time()); $errmsg = line}产生通知的时间:{$date}eof; error_log($errmsg,3,'d:/logs/customer_notice.log'); }}//显示所有错误error_reporting(-1);//设置自定义错误,使用传入类和方法的方式set_error_handler(array('myerrorhandler','deal'));//触发notice级别错误,会保存到log日志中echo $tt;//手动触发一个错误trigger_error('手动抛出一个错误',e_user_error);
register_shutdown_function()函数
'; //因为register_shutdown_function调用该函数的时候,是代码终止,脱离当前php上下文环境了 //所以$filename的路径要写决定路径!!! file_put_contents('d:\logs\register_shutdown_function.log', error_get_last()); die('endscript'); } }}//特别声明!如果有die或exit在注册错误处理之前,那么将不会注册错误处理register_shutdown_function(array('showdown','endscript'));echo md6(); 错误抑制符 @settype($var,'longjq'); //无变量$var,使用@符号进行抑制错误输出
错误级别 http://www.w3school.com.cn/php/php_ref_error.asp