程序其實很簡單,主要是正則查詢,這里就簡單說一下基本思路,有興趣的朋友可以自行嘗試看看。
首先,需要獲取日志文件夾下的日志文件。這里需要把日志文件夾指定到當前站點下,并給予iis用戶的讀取和寫入權限(方便遠程刪除)。如果還需要遠程查閱,還需要指定log的mime類型為text/plain。
主要代碼,遍歷日志文件夾:glob($path.'*.log');
(我這里因為修改了日志字段,為了測試把之前的日志都刪除了,就這一條,應該是會把日志文件夾下的所有日志文件列舉出來的)
然后就是分析日志了。每個人可能有不同的分析方法和思路。我這里是按蜘蛛來分類的,并列舉其下圖片、樣式、js、html及404情況。
主要代碼,判斷該條日志中是否包含指定內容(注意過濾假蜘蛛,我這里是根據所有已知的蜘蛛ip段來匹配,匹配到了再判斷是否有滿足條件的內容):if(stristr($value,'.css')) $spiders[$v][4]+=1;
值得注意的是,日志中會有很多假蜘蛛,這個對于我們的分析來說會有不良效果,所以你最好把假蜘蛛排除掉!
主要代碼,通過正則匹配到需要的時間、目標、狀態碼和ip地址等內容:preg_match_all('/([\d]{4}-[\d]{2}-[\d]{2} [\d]{2}:[\d]{2}:[\d]{2})/',$value,$time);
上圖是具體的訪問情況。需要說明的有幾點。
1、訪問ip這里是保留的一個功能,之前把假蜘蛛也記錄出來了,之所以有個查詢功能(調用ip138查詢,能判斷出是否蜘蛛)是怕判斷錯誤,導致真實蜘蛛也未納入統計。
2、當前這個站點綁定了很多二級域名,為了區分受訪的到底是哪個域名,在iis字段中加入了主機一列,并利用js實現查找、過濾進行分析。
最后,值得說明的事,因為采集、假蜘蛛、及真實用戶等數量可能非常龐大,導致iis日志文件太大太大,找個程序就有點卡殼了。為了盡可能減小iis日志的大小,我對用戶ip(包括假蜘蛛)做了限制,當訪問到一定數量后需要人工驗證。另外,把iis日志中的用戶名、服務器名稱、服務器ip、方法、協議狀態、字節、時長等字段都去掉了。
© 致遠 2022-12-11,原創內容,轉載請注明出錯:php寫iis日志分析程序