/** * 分析用户的访问流并进行相应的记录 * @param type $fitDataArray */ public static function userVisitFlow($fitDataArray, $li_short_name) { //获得解释过后的一个数组 $mat = $fitDataArray['mat']; //获得请求页面 if (!isset($mat[3][0])) { return false; } $accPage = $mat[3][0]; $newInfo = ToolService::parseRequestInfo($accPage); //获得正常的表达式 if (!isset($newInfo[2][0])) { return FALSE; } $realUrl = self::trimURl($newInfo[2][0], $li_short_name); //如果请求连接有问题那么直接返回错误 if ($realUrl === FALSE) { return false; } //获得来源页面 if (!isset($mat[6][0])) { return FALSE; } $sourcePage = $mat[6][0]; $fromUrl = self::trimFromURL($sourcePage); //保存数据到文件缓冲 $target = \Yii::$app->cache->get('target'); if ($target !== false) { if (isset($target[$realUrl][$fromUrl])) { $target[$realUrl][$fromUrl] = $target[$realUrl][$fromUrl] + 1; } else { $target[$realUrl][$fromUrl] = 1; } } else { $target[$realUrl][$fromUrl] = 1; } //保存这个数据到缓冲文件,10分钟处理一次数据时,会把数据入库 \Yii::$app->cache->set('target', $target); }
public static function saveToDbForNginx($content_arr, $cdn_tag = false, $short_name = '', $source = '') { $access_log_arr = []; $num = 0; foreach ($content_arr as $c_val) { $parse_rs = ToolService::parseNginxAccessLog($c_val, $cdn_tag); $mat = $parse_rs['mat']; $china_cache_rs = $parse_rs['china_cache_rs']; $ip_mat = ToolService::parseIp($mat[1][0]); $user_ip1 = empty($ip_mat[0][0]) ? "" : $ip_mat[0][0]; $user_ip2 = empty($ip_mat[0][1]) ? "" : $ip_mat[0][1]; $user_ip3 = empty($ip_mat[0][2]) ? "" : $ip_mat[0][2]; $user_ip4 = empty($ip_mat[0][3]) ? "" : $ip_mat[0][3]; //处理时间 $time = empty($mat[2][0]) ? "" : $mat[2][0]; if (empty($time)) { $request_time = null; } else { $request_time = ToolService::parseNginxDateTime($time); } $request_info = empty($mat[3][0]) ? "" : $mat[3][0]; //再解析 $request_mat = ToolService::parseRequestInfo($request_info); $request_type = empty($request_mat[1][0]) ? "" : $request_mat[1][0]; $access_address = empty($request_mat[2][0]) ? "" : $request_mat[2][0]; $protocol = empty($request_mat[3][0]) ? "" : $request_mat[3][0]; $status = empty($mat[4][0]) ? 0 : $mat[4][0]; $content_size = empty($mat[5][0]) ? 0 : $mat[5][0]; if ($china_cache_rs == false) { $http_referer = empty($mat[6][0]) ? "" : $mat[6][0]; $user_agent = empty($mat[7][0]) ? "" : $mat[7][0]; $ua = new UserAgentService($user_agent); $plat_form = $ua->platform(); $browser = $ua->browser(); $take_time = empty($mat[8][0]) ? 0 : $mat[8][0]; } else { //有china_cache $http_referer = empty($mat[6][0]) ? "" : $mat[6][0]; $user_agent = empty($mat[7][0]) ? "" : $mat[7][0]; $plat_form = ""; $browser = ""; $take_time = empty($mat[8][0]) ? 0 : $mat[8][0]; } $access_log_arr[] = [$user_ip1, $user_ip2, $user_ip3, $user_ip4, $request_time, $request_type, $protocol, $access_address, $status, $content_size, $http_referer, $user_agent, $plat_form, $browser, $take_time, $short_name, $source]; } self::batchSaveNginxAccessLog($access_log_arr); return true; }