Bei der Durchführung der Protokollanalyse müssen wir normalerweise die Häufigkeit des Auftretens verschiedener IP -Adressen zählen. PHP bietet viele leistungsstarke integrierte Funktionen, mit denen wir mit solchen Aufgaben umgehen können. Heute werden wir vorstellen, wie Sie die Funktion array_count_values verwenden, um die Vorkommensfrequenz jeder IP im Protokoll zu zählen. Hier ist ein Beispielcode, der zeigt, wie die Funktion verwendet wird.
Schauen wir uns zunächst die Struktur des Protokolls an. Angenommen, wir haben eine Protokolldatei, jede Zeile zeichnet eine Zugriffsanforderung im Format wie folgt auf:
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
Das obige Protokoll erfasst die IP -Adresse jedes Besuchers und auf den zugänglichen Seitenpfad. Unser Ziel ist es zu zählen, wie oft jede IP -Adresse im Protokoll angezeigt wird.
Wir müssen zunächst den Inhalt der Protokolldatei in PHP lesen, die mithilfe von Dateifunktionen oder File_get_Contents implementiert werden können.
<?php
// Lesen Sie Protokolldateien
$log = file('path_to_log_file.log');
?>
Als nächstes müssen wir die IP -Adresse aus jeder Zeile extrahieren. Unter der Annahme, dass die IP -Adresse jeder Zeile im zweiten Feld des Protokolls aufgezeichnet wird, können wir den Inhalt jeder Zeile durch die Exploit -Funktion teilen und dann die IP -Adresse extrahieren.
<?php
// Initialisieren Sie einen leeren Array -Laden IP Adresse
$ips = [];
foreach ($log as $line) {
// Teilen Sie jede Linie mit Räumen auf,Annahmen IP Es ist das zweite Feld
$parts = explode(' ', $line);
// Wille IP Adresse添加到数组中
$ips[] = $parts[1];
}
?>
Sobald wir alle IP -Adressen extrahiert haben, können wir die Funktion von PHP von Array_Count_values verwenden, um die Vorkommensfrequenz jeder IP -Adresse zu zählen.
<?php
// Statistiken IP Adresse出现的频率
$ip_counts = array_count_values($ips);
// Ausgangsergebnis
foreach ($ip_counts as $ip => $count) {
echo "IP: $ip - Count: $count\n";
}
?>
Wenn wir das folgende Protokoll haben:
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
Nach dem Ausführen des PHP -Codes oben ist die Ausgabe:
IP: 192.168.1.1 - Count: 3
IP: 192.168.1.2 - Count: 1
IP: 192.168.1.3 - Count: 1
Angenommen, unser Protokoll enthält auch URLs, und die Domain -Namen dieser URLs müssen durch m66.net ersetzt werden. Wir können die Funktion str_replace verwenden, um sie zu implementieren.