使用 Response::send 取代 Response::returnData

This commit is contained in:
7IN0SAN9
2015-12-25 14:43:26 +08:00
parent c19ed0e7f1
commit fe393032dd

View File

@@ -11,124 +11,119 @@
namespace think; namespace think;
class Error class Error {
{ /**
/** * 自定义异常处理
* 自定义异常处理 * @access public
* @access public * @param mixed $e 异常对象
* @param mixed $e 异常对象 */
*/ public static function appException($e) {
public static function appException($e) $error = [
{ 'message' => $e->getMessage(),
$error = [ 'file' => $e->getFile(),
'message' => $e->getMessage(), 'line' => $e->getLine(),
'file' => $e->getFile(), 'trace' => $e->getTraceAsString(),
'line' => $e->getLine(), 'code' => $e->getCode(),
'trace' => $e->getTraceAsString(), ];
'code' => $e->getCode(), // 发送http状态信息
]; Response::sendHttpStatus(Config::get('exception_http_status'));
// 发送http状态信息 // 输出异常页面
Response::sendHttpStatus(Config::get('exception_http_status')); self::halt($error);
// 输出异常页面 }
self::halt($error);
}
/** /**
* 自定义错误处理 * 自定义错误处理
* @access public * @access public
* @param int $errno 错误类型 * @param int $errno 错误类型
* @param string $errstr 错误信息 * @param string $errstr 错误信息
* @param string $errfile 错误文件 * @param string $errfile 错误文件
* @param int $errline 错误行数 * @param int $errline 错误行数
* @return void * @return void
*/ */
public static function appError($errno, $errstr, $errfile, $errline) public static function appError($errno, $errstr, $errfile, $errline) {
{ $errorStr = "[{$errno}] {$errstr} {$errfile}{$errline} 行.";
$errorStr = "[{$errno}] {$errstr} {$errfile}{$errline} 行."; switch ($errno) {
switch ($errno) { case E_USER_ERROR:
case E_USER_ERROR: self::halt($errorStr, $errno);
self::halt($errorStr, $errno); break;
break; case E_STRICT:
case E_STRICT: case E_USER_WARNING:
case E_USER_WARNING: case E_USER_NOTICE:
case E_USER_NOTICE: default:
default: Log::record($errorStr, 'warn');
Log::record($errorStr, 'warn'); break;
break; }
} }
}
/** /**
* 应用关闭处理 * 应用关闭处理
* @return void * @return void
*/ */
public static function appShutdown() public static function appShutdown() {
{ // 记录日志
// 记录日志 Log::save();
Log::save(); if ($e = error_get_last()) {
if ($e = error_get_last()) { switch ($e['type']) {
switch ($e['type']) { case E_ERROR:
case E_ERROR: case E_PARSE:
case E_PARSE: case E_CORE_ERROR:
case E_CORE_ERROR: case E_COMPILE_ERROR:
case E_COMPILE_ERROR: case E_USER_ERROR:
case E_USER_ERROR: ob_end_clean();
ob_end_clean(); self::halt($e);
self::halt($e); break;
break; }
} }
} }
}
/** /**
* 错误输出 * 错误输出
* *
* @param mixed $error 错误 * @param mixed $error 错误
* @param int $code * @param int $code
*/ */
public static function halt($error, $code = 1) public static function halt($error, $code = 1) {
{ $message = is_array($error) ? $error['message'] : $error;
$message = is_array($error) ? $error['message'] : $error; $code = is_array($error) ? $error['code'] : $code;
$code = is_array($error) ? $error['code'] : $code;
if (APP_DEBUG) { if (APP_DEBUG) {
//调试模式下输出错误信息 //调试模式下输出错误信息
if (!is_array($error)) { if (!is_array($error)) {
$trace = debug_backtrace(); $trace = debug_backtrace();
$e['message'] = $error; $e['message'] = $error;
$e['code'] = $code; $e['code'] = $code;
$e['file'] = $trace[0]['file']; $e['file'] = $trace[0]['file'];
$e['line'] = $trace[0]['line']; $e['line'] = $trace[0]['line'];
ob_start(); ob_start();
debug_print_backtrace(); debug_print_backtrace();
$e['trace'] = ob_get_clean(); $e['trace'] = ob_get_clean();
} else { } else {
$e = $error; $e = $error;
} }
} elseif (!IS_API) { } elseif (!IS_API) {
//否则定向到错误页面 //否则定向到错误页面
$error_page = Config::get('error_page'); $error_page = Config::get('error_page');
if (!empty($error_page)) { if (!empty($error_page)) {
header('Location: ' . $error_page); header('Location: ' . $error_page);
} else { } else {
$e['code'] = $code; $e['code'] = $code;
$e['message'] = Config::get('show_error_msg') ? $message : Config::get('error_message'); $e['message'] = Config::get('show_error_msg') ? $message : Config::get('error_message');
} }
} else { } else {
$e = ['message' => $message, 'code' => $code]; $e = ['message' => $message, 'code' => $code];
} }
// 记录异常日志 // 记录异常日志
Log::write('[' . $e['code'] . '] ' . $e['message'] . '[' . $e['file'] . ' : ' . $e['line'] . ']', 'error'); Log::write('[' . $e['code'] . '] ' . $e['message'] . '[' . $e['file'] . ' : ' . $e['line'] . ']', 'error');
$type = Config::get('default_return_type'); $type = Config::get('default_return_type');
if (!IS_API && 'html' == $type) { if (!IS_API && 'html' == $type) {
include Config::get('exception_tmpl'); include Config::get('exception_tmpl');
} else { } else {
// 异常信息输出监听 // 异常信息输出监听
APP_HOOK && Hook::listen('error_output', $e); APP_HOOK && Hook::listen('error_output', $e);
// 输出异常内容 // 输出异常内容
Response::returnData($e, $type); Response::send($e, $type);
} }
exit; exit;
} }
} }