로그 분석을 수행 할 때는 일반적으로 다른 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_get_contents를 사용하여 구현할 수 있습니다.
<?php
// 로그 파일을 읽으십시오
$log = file('path_to_log_file.log');
?>
다음으로 각 줄에서 IP 주소를 추출해야합니다. 각 행의 IP 주소가 로그의 두 번째 필드에 기록된다고 가정하면, 각 행의 내용을 Exploit 함수를 통해 나누고 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 기능을 사용하여 구현할 수 있습니다.