Lorsque vous effectuez une analyse du journal, nous devons généralement compter la fréquence d'occurrence de différentes adresses IP. PHP offre de nombreuses fonctions intégrées puissantes pour nous aider à gérer ces tâches. Aujourd'hui, nous présenterons comment utiliser la fonction array_count_values pour compter la fréquence d'occurrence de chaque IP dans le journal. Voici un exemple de code montrant comment utiliser la fonction.
Tout d'abord, jetons un coup d'œil à la structure du journal. Supposons que nous ayons un fichier journal, chaque ligne enregistre une demande d'accès, dans le format comme suit:
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
Le journal ci-dessus enregistre l'adresse IP de chaque visiteur et le chemin de page à accéder. Notre objectif est de compter à quelle fréquence chaque adresse IP apparaît dans le journal.
Nous devons d'abord lire le contenu du fichier journal dans PHP, qui peut être implémenté à l'aide de fonctions de fichier ou de fichier_get_contents .
<?php
// Lire les fichiers journaux
$log = file('path_to_log_file.log');
?>
Ensuite, nous devons extraire l'adresse IP de chaque ligne. En supposant que l'adresse IP de chaque ligne est enregistrée dans le deuxième champ du journal, nous pouvons diviser le contenu de chaque ligne via la fonction d'exploitation , puis extraire l'adresse IP.
<?php
// Initialiser un magasin de tableaux vides IP adresse
$ips = [];
foreach ($log as $line) {
// Divisez chaque ligne avec des espaces,Hypothèses IP C'est le deuxième champ
$parts = explode(' ', $line);
// Volonté IP adresse添加到数组中
$ips[] = $parts[1];
}
?>
Une fois que nous avons extrait toutes les adresses IP, nous pouvons utiliser la fonction Array_Count_Values de PHP pour compter la fréquence d'occurrence de chaque adresse IP.
<?php
// statistiques IP adresse出现的频率
$ip_counts = array_count_values($ips);
// Résultat de sortie
foreach ($ip_counts as $ip => $count) {
echo "IP: $ip - Count: $count\n";
}
?>
Si nous avons le journal suivant:
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
Après avoir exécuté le code PHP ci-dessus, la sortie sera:
IP: 192.168.1.1 - Count: 3
IP: 192.168.1.2 - Count: 1
IP: 192.168.1.3 - Count: 1
Supposons que notre journal contient également des URL, et les noms de domaine de ces URL doivent être remplacés par m66.net . Nous pouvons utiliser la fonction STR_REPLACE pour l'implémenter.