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.
83 lines
2.6 KiB
83 lines
2.6 KiB
<?php |
|
/** |
|
* |
|
* RequestMonitoring.php |
|
* User: ChenLong <vip_chenlong@163.com> |
|
* DateTime: 2020/7/15 10:53 |
|
*/ |
|
|
|
|
|
namespace app\middleware; |
|
|
|
|
|
use app\common\SdException; |
|
use think\facade\Config; |
|
use think\facade\Event; |
|
use think\facade\Log; |
|
use think\Request; |
|
use think\Response; |
|
|
|
/** |
|
* 请求监听 |
|
* Class RequestListen |
|
* @package app\middleware |
|
*/ |
|
class RequestListen |
|
{ |
|
/** |
|
* 时间 |
|
* @param Request $request |
|
* @param \Closure $closure |
|
* @param array $time |
|
* 指定时间 ['2020-10-11 11:11:11'] |
|
* 指定当天范围 ['2020-10-11 11:11:11','2020-10-11 11:20:11', true] |
|
* 指定范围 ['2020-10-11 11:11:11','2020-10-12 11:20:11'] |
|
* @return mixed |
|
*/ |
|
public function handle(Request $request, \Closure $closure, array $time = []) |
|
{ |
|
if (!$this->timeCheck($time)){ |
|
return $closure($request); |
|
} |
|
|
|
$start_time = microtime(true); |
|
Log::info(sprintf("------------------------【START TIME:%s】------------------------", date('Y-m-d H:i:s'))); |
|
Log::info(sprintf("URL:%s://%s%s", $request->server('REQUEST_SCHEME'), $request->server('SERVER_NAME'), $request->server('REQUEST_URI'))); |
|
Log::info(sprintf("IP:%s ", $request->server('REMOTE_ADDR'))); |
|
Log::info(sprintf("TOKEN:%s", $request->server('HTTP_TOKEN'))); |
|
Log::info(sprintf("PARAM:%s", var_export($request->request(), true))); |
|
|
|
$request->withMiddleware(['request_listen' => true]); |
|
$response = $closure($request); |
|
|
|
Log::info(sprintf("RESPONSE:%s ", var_export($response->getData(), true))); |
|
Log::info(sprintf("TOTAL_TIME:%s", microtime(true) - $start_time)); |
|
Log::info(sprintf("========================【END TIME:%s】========================", date('Y-m-d H:i:s'))); |
|
|
|
return $response; |
|
} |
|
|
|
/** |
|
* @param array $time |
|
* @return bool |
|
*/ |
|
private function timeCheck(array $time) |
|
{ |
|
if (empty($time)) return true; |
|
|
|
$current = time(); |
|
if (($length = count($time)) >= 3) { |
|
$setting_start = strtotime(date('Y-m-d ' . $time[0])); |
|
$setting_end = strtotime(date('Y-m-d ' . $time[1])); |
|
$today = strtotime(date('Y-m-d')); |
|
return (($current - $today) >= ($setting_start - $today)) |
|
&& (($current - $today) <= ($setting_end - $today)); |
|
}else if ($length == 2) { |
|
return $current >= strtotime(date($time[0])) |
|
&& $current <= strtotime(date($time[1])); |
|
} |
|
|
|
return $current === strtotime($time[0]); |
|
} |
|
} |
|
|
|
|