No Description

ThinkException.class.php 4.4KB

    <?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 ; } }