当前位置: 首页> 最新文章列表> 日志分析中 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 函数来实现。