|
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2012 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
// $Id: ThinkException.class.php 2791 2012-02-29 10:08:57Z liu21st $
/**
+------------------------------------------------------------------------------
* ThinkPHP系统异常基类
+------------------------------------------------------------------------------
* @category Think
* @package Think
* @subpackage Exception
* @author liu21st <liu21st@gmail.com>
* @version $Id: ThinkException.class.php 2791 2012-02-29 10:08:57Z liu21st $
+------------------------------------------------------------------------------
*/
class ThinkException extends Exception {
/**
+----------------------------------------------------------
* 异常类型
+----------------------------------------------------------
* @var string
* @access private
+----------------------------------------------------------
*/
private $type;
// 是否存在多余调试信息
private $extra;
/**
+----------------------------------------------------------
* 架构函数
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @param string $message 异常信息
+----------------------------------------------------------
*/
public function __construct($message,$code=0,$extra=false) {
parent::__construct($message,$code);
$this->type = get_class($this);
$this->extra = $extra;
}
/**
+----------------------------------------------------------
* 异常输出 所有异常处理类均通过__toString方法输出错误
* 每次异常都会写入系统日志
* 该方法可以被子类重载
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @return array
+----------------------------------------------------------
*/
public function __toString() {
$trace = $this->getTrace();
if($this->extra)
// 通过throw_exception抛出的异常要去掉多余的调试信息
array_shift($trace);
$this->class = $trace[0]['class'];
$this->function = $trace[0]['function'];
$this->file = $trace[0]['file'];
$this->line = $trace[0]['line'];
$file = file($this->file);
$traceInfo='';
$time = date('y-m-d H:i:m');
foreach($trace as $t) {
$traceInfo .= '['.$time.'] '.$t['file'].' ('.$t['line'].') ';
$traceInfo .= $t['class'].$t['type'].$t['function'].'(';
$traceInfo .= implode(', ', $t['args']);
$traceInfo .=")\n";
}
$error['message'] = $this->message;
$error['type'] = $this->type;
$error['detail'] = L('_MODULE_').'['.MODULE_NAME.'] '.L('_ACTION_').'['.ACTION_NAME.']'."\n";
$error['detail'] .= ($this->line-2).': '.$file[$this->line-3];
$error['detail'] .= ($this->line-1).': '.$file[$this->line-2];
$error['detail'] .= '<font color="#FF6600" >'.($this->line).': <strong>'.$file[$this->line-1].'</strong></font>';
$error['detail'] .= ($this->line+1).': '.$file[$this->line];
$error['detail'] .= ($this->line+2).': '.$file[$this->line+1];
$error['class'] = $this->class;
$error['function'] = $this->function;
$error['file'] = $this->file;
$error['line'] = $this->line;
$error['trace'] = $traceInfo;
// 记录 Exception 日志
if(C('LOG_EXCEPTION_RECORD')) {
Log::Write('('.$this->type.') '.$this->message);
}
return $error ;
}
}
|