1、创建MyErrorHandler.php文件
代码如下:
php class MyErrorHandler {public $message;public $filename;public $line;public $vars = array();protected $_noticeLog = 'F: oot 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($errno,$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();default:return false;}}/*** 致命的错误*/public function dealError() {ob_start();debug_print_backtrace();$backtrace = ob_get_flush();$errorMsg = <<<EOF 出现了致命的错误,如下: 产生错误的文件:{ $this->filename} 产生错误的信息:{ $this->message} 产生错误的行号:{ $this->line} 追踪信息{ $backtrace} EOF;error_log($errorMsg,1,'[email protected]','From:php[error错误日志]');exit(1);}/*** 警告的错误*/public function dealWarning() {$errorMsg = <<<EOF 出现了警告的错误,如下: 产生警告的文件:{ $this->filename} 产生警告的信息:{ $this->message} 产生警告的行号:{ $this->line} EOF;return error_log($errorMsg,1,'[email protected]','From:php[error警告日志]');}/*** 通知的错误*/public function dealNotice() {$datetime = date('Y-m-d H:i:s');$errorMsg = <<<EOF 出现了通知的错误,如下: 产生通知的文件:{ $this->filename} 产生通知的信息:{ $this->message} 产生通知的行号:{ $this->line} 产生通知的时间:{ $datetime} EOF;return error_log($errorMsg,3,$this->_noticeLog);} }
2、测试代码
php include "MyErrorHandler.php";//报告所有 PHP 错误 error_reporting(-1);//不显示错误信息 ini_set('display_errors',0); set_error_handler(array('MyErrorHandler','deal'));echo $test; //Notice错误 settype($var,'test'); //警告错误 test();
注意:发送邮件需要在本地配置mail函数,可以参考本人的上一篇文章如何配置mail函数发邮件。