c === 0) { Schema::create($table_name, function (Blueprint $table) { $table->id(); $table->string('request_ip', 15); $table->text('post_data'); $table->text('get_data'); $table->text('header_data'); $table->text('response_data')->nullable(); $table->string('request_url', 300); $table->timestamps(); }); } self::$request = new \App\Models\RequestLog; self::$request->setTable($table_name); } public static function RequestLog() { if ($_SERVER['REQUEST_METHOD'] !== 'OPTIONS' && env('REQUEST_LOG') && !self::$request) { self::CheckTableName(); $post_data = request()->post(); foreach ($post_data as $key => $post_datum) { $str_len = mb_strlen(json_encode($post_datum, JSON_UNESCAPED_UNICODE)); $str_size = $str_len / 1024; if ($str_size > 10) { $post_data["$key"] = 'Row size too large'; } } $post_data = json_encode($post_data, JSON_UNESCAPED_UNICODE); $str_len = mb_strlen($post_data); $str_size = $str_len / 1024; if ($str_size > 40) $post_data = '{"data":"Row size too large"}'; $get_data = $_GET; $header_data = request()->header(); foreach ($header_data as $key => $header_datum) { $str_len = mb_strlen(json_encode($header_datum, JSON_UNESCAPED_UNICODE)); $str_size = $str_len / 1024; if ($str_size > 10) { $header_data["$key"] = 'Row size too large'; } } $header_data = json_encode($header_data, JSON_UNESCAPED_UNICODE); $str_len = mb_strlen($header_data); $str_size = $str_len / 1024; if ($str_size > 40) $header_data = '{"data":"Row size too large"}'; $get_data = json_encode($get_data, JSON_UNESCAPED_UNICODE); self::$request->request_ip = self::ip(); self::$request->post_data = $post_data == '[]' ? '{}' : $post_data; self::$request->get_data = $get_data == '[]' ? '{}' : $get_data; self::$request->header_data = $header_data == '[]' ? '{}' : $header_data; self::$request->request_url = explode('?', $_SERVER['REQUEST_URI'])[0]; self::$request->save(); } } // region 获取 IP public static function ip() { //strcasecmp 比较两个字符,不区分大小写。返回0,>0,<0。 if (getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { $ip = getenv('HTTP_CLIENT_IP'); } elseif (getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) { $ip = getenv('HTTP_X_FORWARDED_FOR'); } elseif (getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { $ip = getenv('REMOTE_ADDR'); } elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) { $ip = $_SERVER['REMOTE_ADDR']; } $res = preg_match('/[\d\.]{7,15}/', $ip, $matches) ? $matches [0] : ''; return $res; } // endregion // region 去除空格 public static function ge($str) { return preg_replace("/\s+/", ' ', $str); } // endregion // region 获取完整路径 public static function fp($path) { $http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://'; return $http_type . $_SERVER['HTTP_HOST'] . $path; } // endregion // region 10位时间戳 格式化 public static function date($time = false, $format = "Y-m-d H:i:s") { if (!$time) $time = time(); return date($format, $time); } // endregion // region 毫秒时间戳 public static function time() { return floor(microtime(true) * 1000); } // endregion // region exit public static function exit($data = []) { $res = $data; if ($_SERVER['REQUEST_METHOD'] !== 'OPTIONS' && env('REQUEST_LOG')) { foreach ($data as $key => $datum) { $str_len = mb_strlen(json_encode($datum, JSON_UNESCAPED_UNICODE)); $str_size = $str_len / 1024; if ($str_size > 10) { $data["$key"] = 'Row size too large'; } } $data_str = json_encode($data, JSON_UNESCAPED_UNICODE); $str_len = strlen($data_str); $str_size = $str_len / 1024; if ($str_size > 40) $data_str = '{"data":"Row size too large"}'; self::$request->response_data = $data_str; self::$request->save(); } return response()->json($res)->setEncodingOptions(JSON_UNESCAPED_UNICODE); } // endregion // region echo public static function echo($message = '', $code = 200, $data = []) { $return = []; $return['code'] = intval($code); if ($message) $return['message'] = $message; if ($data) $return['data'] = $data; return self::exit($return); } // endregion public static function post($url, $data, $type = 'json') { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_POST, true); if ($type === 'data') { curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); } if ($type === 'json') { $data_string = json_encode($data, JSON_UNESCAPED_UNICODE); curl_setopt($curl, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json; charset=utf-8', 'Content-Length: ' . strlen($data_string) ]); curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string); } $r = curl_exec($curl); curl_close($curl); return $r; } }