首頁  >  文章  >  後端開發  >  php正規解析apache日誌檔文件

php正規解析apache日誌檔文件

WBOY
WBOY原創
2016-07-29 09:01:131220瀏覽

可以把日誌按小時滾動,採用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);

 也可是這樣

運用正規表示式分隔Apache日誌檔

08-26  瀏覽:17次

使用正規表示式分隔Apache日誌檔案 通用日誌格式的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. " 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"
客戶端的IP位址。
由客戶端identd程序判斷的RFC1413身份(identity),輸出中的符號"-"表示此處的資訊無效。
HTTP認證系統所得到的存取該網頁的客戶識別(userid),如果網頁沒有設定密碼保護,則此項目將是"-"。
伺服器完成請求處理時的時間。
客戶的動作請求的資源使用的協議。
伺服器傳回給客戶端的狀態碼。
傳回給客戶端的不包括回應頭的位元組數.如果沒有訊息傳回,則此項應該是"-"。
"Referer"請求頭。
"User-Agent"請求頭。
用來擷取訊息的正規表示式組成:
^ :符合每一行的開頭。
([0-9.]+)s :符合IP位址。
([w.-]+)s :符合identity,由數字字母下劃線或點分隔符號組成。
([w.-]+)s :符合userid,由數字字母下劃線或點分隔符號組成。
([[^[]]+])s :匹配時間。
"((?:[^"]|")+)"s : 匹配請求訊息,雙引號中可能出現轉義的雙引號"。
(d{3})s : 匹配狀態碼。
(d+ |-)s :符合回應位元組數或-。
"((?:[^"]|")+)" :匹配"User-Agent"請求頭,雙引號中可能出現轉義的雙引號"。
$ : 匹配行尾。
最終的表達式如下:
^([0-9.]+)s([w.-]+)s([w.-]+)s([[^[]]+])s"((?:[^ "]|")+)"s(d{3})s(d+|-)s"((?:[^"]|")+)"s"((?:[^"]|") +)"$

以上就介紹了php正規解析apache日誌文件文件,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn