Example #1
0
 /**
  * 分析用户的访问流并进行相应的记录
  * @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);
 }
Example #2
0
 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;
 }