MyErrorHandler.php
<?php
class MyErrorHandler
{
public $message = '';
public $filename = '';
public $line = 0;
public $var = array();
protected $_noticeLog = 'D:\error\noticeLog.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->dealWaining();
break;
case E_NOTICE:
case E_USER_NOTICE:
return $self->dealNotice();
break;
default:
return false;
}
}
/**
* 如何處理致命錯誤
*/
public function dealError()
{
ob_start();//打開輸出緩沖區,所有的輸出信息不在直接發送到瀏覽器
debug_print_backtrace();//打印 PHP回溯
$backtrace = ob_get_flush();
$errorMsg = <<<EOF
出現了致命錯誤,如下:
產生錯誤的文件:{$this->filename}
產生錯誤的信息:{$this->message}
產生錯誤的行號:{$this->line}
追蹤信息:{$backtrace}
EOF;
error_log($errorMsg, 1, '403133112@qq.com');
exit(1);
}
/**
* 如何處理警告
*/
public function dealWarning()
{
$errorMsg = <<<EOF
出現了警告錯誤,如下
產生警告的文件:{$this->filename}
產生警告的信息:{$this->message}
產生警告的行號:{$this->line}
EOF;
return error_log($errorMsg, 1, '403133112@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);
}
}
?>
test.php
<?php
header('content-type:text/html:charset=utf-8');
require_once 'MyErr orHandler.php';
error_reporting(-1);
ini_set('display_errors', 0);
set_error_handler(array('MyErrorHandler', 'deal'));
echo $test;
//settype($var, 'king');
//test();
trigger_error('我是手動拋出的致命錯誤', E_USER_ERROR);//郵件接收
echo "this is a test";//無執行
?>
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。