PHP,日誌分析,排序,二維數組去重,計算重複數據,截取--適合小數據量日誌

<?php

//[email protected]
//打開日誌文件,取日誌的IP和訪問頁面信息
function logput() {
   $open=file("test.log");
   $i=0;
   foreach ($open as $value) {
       $arr=explode(" ", $value);
       //var_dump($arr);
       $row[$i]=array("ip"=>$arr[0],"url"=>$arr[10]);
       $i++;
   }
   return $row;
//   $open=fopen("my.log", "r");
//   $i=0;
//   while(!feof($open)){
//       $value=fgets($open);
//       $arr=explode(" ",$value);
//       $ip=$arr[0];
//       //$time=$arr[3];
//       $url=$arr[10];
//       $row[$i]= array("ip"=>$ip,"url"=>$url);        
//       $i++;
//   }
 return $row;
}

$a=logput();
//將二維數組降成一維數組,去重,調用計算函數,計算每種結果的重複次數
function array_unique_fb($array2D){
     foreach ($array2D as $v){
         $v = join(",",$v);  //降維,也可以用implode,將一維數組轉換爲用逗號連接的字符串
         $temp[] = $v;
     }

    $mon = array_unique($temp);//去掉重複的字符串,也就是重複的一維數組
    sort($mon);//去重後的數組,對應的編號需要重新排序
  return  test($temp,$mon);//調用計算函數
   
}
//計算函數,計算去重後日志的重複數
function test($all,$arr){
$number = count($all);//統計所有日誌的行數
$number1 = count($arr);//統計去重後日志的行數
//用去重後的日誌每一行到原生日誌裏比較,計算有多少重複,並計數
for($i=0;$i<$number1;$i++){
     $n = 0;
        for ($j=0;$j<$number;$j++){
           if($arr[$i]===$all[$j]){
             $n++;
           }  
        }
//   $info = array($i => array("copynumber"=>$n,"value"=>$arr[$i]));//去重後日志和重數數值組合
           $info[] = array("copynumber"=>$n,"value"=>$arr[$i]);//去重後日志和重數數值組合
    
}
//var_dump($info);
return $info;
}
$title = array_unique_fb($a);
rsort($title);

foreach ($title as $value) {
    $pos = strpos($value['value'], "219.232.254");
    
   if ($pos !== 0)
   {
    echo $value['copynumber']." ".$value['value'];
    echo "<br>";
       
   }
   
}
?>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章