You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
3.7 KiB
99 lines
3.7 KiB
<?php
|
|
/**
|
|
* Created by PhpStorm.
|
|
* User: Admin
|
|
* Date: 2018/8/6
|
|
* Time: 19:01
|
|
*/
|
|
|
|
namespace app\lib\exception;
|
|
|
|
|
|
use think\Db;
|
|
use think\exception\Handle;
|
|
use think\Log;
|
|
use think\Request;
|
|
|
|
class ExceptionHandle extends Handle
|
|
{
|
|
public function render(\Exception $e)
|
|
{
|
|
if ($e instanceof HtmlException) {
|
|
echo $this->responseToHtmlError($e->getMessage());
|
|
die;
|
|
} else if ($e instanceof JsonException) {
|
|
$url = Request::instance()->url();
|
|
$result = [
|
|
'status' => $e->status,
|
|
'message' => $e->message,
|
|
'data' => $e->data,
|
|
'request_url' => $url,
|
|
];
|
|
return json($result);
|
|
} else if($e instanceof SysException){
|
|
//TODO 使用error_log 在数据库记录错误信息
|
|
$data = [
|
|
'time'=>time(),
|
|
//'ip'=>get_client_ip(),
|
|
'ip'=>Request::instance()->ip(),
|
|
'url'=>$_SERVER['REQUEST_URI'] ? $_SERVER['REQUEST_URI'] : "for-cli",
|
|
'message'=>$e->message,
|
|
'num'=>$e->errCode,
|
|
"data"=>$e->data,
|
|
];
|
|
Db::name("log")->add($data);
|
|
return json(['status'=>-1,"message"=>"系统错误,请重试!"]);
|
|
} else {
|
|
return parent::render($e);
|
|
}
|
|
}
|
|
|
|
public function responseToHtmlError($message,$url = "")
|
|
{
|
|
$html =
|
|
<<<START
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
|
|
<title>跳转提示</title>
|
|
<style type="text/css">
|
|
*{ padding: 0; margin: 0; }
|
|
body{ background: #fff; font-family: "Microsoft Yahei","Helvetica Neue",Helvetica,Arial,sans-serif; color: #333; font-size: 16px; }
|
|
.system-message{ padding: 24px 48px; }
|
|
.system-message h1{ font-size: 100px; font-weight: normal; line-height: 120px; margin-bottom: 12px; }
|
|
.system-message .jump{ padding-top: 10px; }
|
|
.system-message .jump a{ color: #333; }
|
|
.system-message .success,.system-message .error{ line-height: 1.8em; font-size: 36px; }
|
|
.system-message .detail{ font-size: 12px; line-height: 20px; margin-top: 12px; display: none; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="system-message">
|
|
<h1>:(</h1>
|
|
<p class="error">{$message}</p>
|
|
<p class="detail"></p>
|
|
<p class="jump">
|
|
页面自动 <a id="href" href="javascript:history.back(-1);">跳转</a> 等待时间: <b id="wait">3</b>
|
|
</p>
|
|
</div>
|
|
<script type="text/javascript">
|
|
(function(){
|
|
var wait = document.getElementById('wait'),
|
|
href = document.getElementById('href').href;
|
|
var interval = setInterval(function(){
|
|
var time = --wait.innerHTML;
|
|
if(time <= 0) {
|
|
location.href = href;
|
|
clearInterval(interval);
|
|
};
|
|
}, 1000);
|
|
})();
|
|
</script>
|
|
</body>
|
|
</html>
|
|
START;
|
|
return $html;
|
|
}
|
|
} |