시간 단위로 로그를 롤링하고 PHP 정규식 로그 분석을 사용하여 문제를 해결할 수 있습니다.
$logLine ='127.0.0.1 - - [22/May/2015:17:09:13 +0800] "GET /sale/images/y-select.png HTTP/1.1" 200 1095';
$pattern = '/^(?P<ip>[0-9.]+) - - \[(?P<time>[^\]]+)\]+ "GET (?P<url>[^ ]+) HTTP\/1.[1|0|2]" (?P<status>[0-9.]+) (?P<size>[0-9.]+)/i';
preg_match($pattern, $log, $match);
//var_dump($match);
$ip = $match['ip'];
$time = strtotime($match['time']);
$url = $match['url'];
$status = $match['status'];
$size = $match['size'];
printf("IP:%s 访问时间:%s URL:%s 状态:%s 文件尺寸:%s",$ip,$time,$url,$status,$size);
로그인 후 복사
이렇게 할 수도 있습니다.
정규식을 사용하세요. 아파치 로그 분리 파일
www.MyException.Cn 네티즌 공유 날짜: 2015-08-26 조회수: 17회
정규식을 사용하여 아파치 로그 파일 분리
일반 로그 Apache 로그 파일 형식의 예:
127.0.0.1 - Frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
결합된 로그 형식의 Apache 로그 파일 예:
127.0.0.1 - Frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http:// www.example.com/ start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"
클라이언트의 IP 주소입니다.
클라이언트 identd 프로세스에 의해 결정된 RFC1413 ID입니다. 출력에서 "-" 기호는 여기에 있는 정보가 유효하지 않음을 나타냅니다.
웹페이지에 접속하기 위해 HTTP 인증 시스템에서 얻은 클라이언트 ID(사용자 ID)입니다. 웹페이지가 비밀번호로 보호되어 있지 않은 경우 이 항목은 "-"입니다.
서버가 요청 처리를 완료한 시간입니다.
클라이언트 작업에서 요청한 리소스가 사용하는 프로토콜입니다.
서버가 클라이언트에 반환한 상태 코드입니다.
응답 헤더를 제외하고 클라이언트에 반환되는 바이트 수입니다. 반환되는 정보가 없는 경우 이 항목은 "-"이어야 합니다.
"리퍼러" 요청 헤더.
"User-Agent" 요청 헤더.
정보를 추출하는 데 사용되는 정규 표현식은 다음과 같이 구성됩니다.
^: 각 줄의 시작 부분과 일치합니다.
([0-9.] )s: IP 주소를 일치시킵니다.
([w.-] )s: 숫자, 문자, 밑줄 또는 점 구분 기호로 구성된 ID와 일치합니다.
([w.-] )s: 숫자, 문자, 밑줄 또는 점 구분 기호로 구성된 사용자 ID와 일치합니다.
([[^[]] ])s: 일치 시간.
"((?:[^"]|") )"s: 일치 요청 정보, 이스케이프된 큰따옴표가 큰따옴표 안에 나타날 수 있습니다.
(d{3})s: 일치 상태 코드
(d |-)s: 응답 바이트 수와 일치합니다. 또는 -.
"((?:[^"]|"))"s: "Referer" 요청 헤더와 일치하며 큰따옴표로 표시될 수 있습니다. "확실한 큰따옴표".
"((?:[^"]|") )" : "User-Agent" 요청 헤더와 일치하며 이스케이프된 큰따옴표가 큰따옴표 안에 나타날 수 있습니다.
$ : 줄 끝과 일치합니다. .
최종 표현식은 다음과 같습니다:
^([0-9.] )s([w.-] )s([w.-] )s([[^[]] ])s "((? :[^"]|") )"s(d{3})s(d |-)s"((?:[^"]|") )"s"((?:[^ "]|" ) )"$
위 내용을 포함하여 PHP 정규 파싱 아파치 로그 파일을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되길 바랍니다.