在進行日誌分析時,我們通常需要統計不同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 地址在日誌中出現的頻率。
我們首先需要將日誌文件的內容讀取到PHP 中,可以使用file函數或file_get_contents來實現。
<?php
// 讀取日誌文件
$log = file('path_to_log_file.log');
?>
接下來,我們需要從每一行中提取出IP 地址。假設每行的IP 地址是記錄在日誌的第二個字段中,我們可以通過explode函數來分割每一行的內容,然後提取IP 地址。
<?php
// 初始化一個空數組存儲 IP 地址
$ips = [];
foreach ($log as $line) {
// 以空格分割每一行,假設 IP 是第二個字段
$parts = explode(' ', $line);
// 將 IP 地址添加到數組中
$ips[] = $parts[1];
}
?>
一旦我們提取了所有的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";
}
?>
如果我們有如下日誌:
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
假設我們的日誌中還包含URL,且這些URL 的域名需要被替換為m66.net 。我們可以使用str_replace函數來實現。