自定义错误处理器更加智能。
<?php class myErrorHandler{ //$message:错误信息 //$filename:错误文件名 //$line:错误行号 //$vars:额外信息 public $message = ''; public $filename = ''; public $line = 0; public $vars = array(); protected $_noticeLog = 'D:practisephpFrom otice oticeLog.log'; public function __construct($message,$filename,$line,$vars){ //初始化信息 $this->message = $message; $this->filename = $filename; $this->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; //使用内置错误处理程序 } } //处理致命错误 public function dealError(){ //开启内存缓存 ob_start(); //打印一条PHP回溯 debug_print_backtrace(); $backtrace = ob_get_flush(); $errorMsg = <<<EOF 出现了致命错误,如下: 产生错误的文件:{$this->filename} 产生错误的信息:{$this->message} 产生错误的行号:{$this->line} 追踪信息:{$backtrace}; EOF; error_log($errorMsg, 1, '472323087@qq.com'); //1:管理员,发送给管理员 exit(1);//以错误代码形式来终止 } //处理警告 public function dealWarning(){ $errorMsg = <<<EOF 出现了警告错误,如下: 产生警告的文件:{$this->filename} 产生警告的信息:{$this->message} 产生警告的行号:{$this->line} 追踪信息:{$backtrace}; EOF; return error_log($errorMsg, 1, '472323087@qq.com'); } //处理通知 public function dealNotice(){ $datetime = date("Y-m-d H:i:s", time()); $errorMsg = <<<EOF 出现了通知错误,如下: 产生通知的文件:{$this->filename} 产生通知的信息:{$this->message} 产生通知的行号:{$this->line} 产生通知的时间:{$datetime}; EOF; return error_log($errorMsg, 3, $this->_noticeLog); } }