當前位置: 首頁> 最新文章列表> 日誌分析中IP 出現頻率統計

日誌分析中IP 出現頻率統計

M66 2025-06-07

在進行日誌分析時,我們通常需要統計不同IP 地址的出現頻率。 PHP 提供了許多強大的內置函數來幫助我們處理這種任務。今天我們將介紹如何通過array_count_values函數來統計日誌中各個IP 的出現頻率。下面是一個示例代碼,展示瞭如何使用該函數。

首先,我們來看看日誌的結構。假設我們有一個日誌文件,每一行記錄一個訪問請求,格式如下:

 2025-04-17 12:34:56 192.168.1.1 /home
2025-04-17 12:35:00 192.168.1.2 /about
2025-04-17 12:36:01 192.168.1.1 /contact
2025-04-17 12:37:02 192.168.1.3 /home
2025-04-17 12:38:05 192.168.1.1 /blog

上面的日誌記錄了每個訪問者的IP 地址和訪問的頁面路徑。我們的目標是統計每個IP 地址在日誌中出現的頻率。

步驟1: 讀取日誌文件

我們首先需要將日誌文件的內容讀取到PHP 中,可以使用file函數或file_get_contents來實現。

 <?php
// 讀取日誌文件
$log = file('path_to_log_file.log');
?>

步驟2: 提取IP 地址

接下來,我們需要從每一行中提取出IP 地址。假設每行的IP 地址是記錄在日誌的第二個字段中,我們可以通過explode函數來分割每一行的內容,然後提取IP 地址。

 <?php
// 初始化一個空數組存儲 IP 地址
$ips = [];

foreach ($log as $line) {
    // 以空格分割每一行,假設 IP 是第二個字段
    $parts = explode(' ', $line);
    // 將 IP 地址添加到數組中
    $ips[] = $parts[1];
}
?>

步驟3: 使用array_count_values 統計頻率

一旦我們提取了所有的IP 地址,就可以使用PHP 的array_count_values函數來統計每個IP 地址的出現頻率。

 <?php
// 統計 IP 地址出現的頻率
$ip_counts = array_count_values($ips);

// 輸出結果
foreach ($ip_counts as $ip => $count) {
    echo "IP: $ip - Count: $count\n";
}
?>

步驟4: 示例輸出

如果我們有如下日誌:

 2025-04-17 12:34:56 192.168.1.1 /home
2025-04-17 12:35:00 192.168.1.2 /about
2025-04-17 12:36:01 192.168.1.1 /contact
2025-04-17 12:37:02 192.168.1.3 /home
2025-04-17 12:38:05 192.168.1.1 /blog

運行上面的PHP 代碼後,輸出將是:

 IP: 192.168.1.1 - Count: 3
IP: 192.168.1.2 - Count: 1
IP: 192.168.1.3 - Count: 1

步驟5: 替換日誌中的URL 域名

假設我們的日誌中還包含URL,且這些URL 的域名需要被替換為m66.net 。我們可以使用str_replace函數來實現。