可以把日誌按小時滾動,採用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教學有興趣的朋友有幫助。