| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- <?php
- // +----------------------------------------------------------------------
- // | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2009 http://thinkphp.cn All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
- // +----------------------------------------------------------------------
- // | Author: liu21st <liu21st@gmail.com>
- // +----------------------------------------------------------------------
- // $Id$
- /**
- +------------------------------------------------------------------------------
- * ThinkPHP系统异常基类
- +------------------------------------------------------------------------------
- * @category Think
- * @package Think
- * @subpackage Exception
- * @author liu21st <liu21st@gmail.com>
- * @version $Id$
- +------------------------------------------------------------------------------
- */
- 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).': <b>'.$file[$this->line-1].'</b></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;
- //记录系统日志
- Log::Write('('.$this->type.') '.$this->message);
- return $error ;
- }
- }//类定义结束
- ?>
|