我有一個服務器日誌文件,我正嘗試從中創建彙總其存儲的數據的PHP頁面。日誌中的每條記錄都存儲在一個新的生產線,並在格式:使用PHP從日誌文件中提取數據
207.3.35.52 -- [2007-04-01 01:24:42] "GET index.php HTTP/1.0" 200 11411 "Mozilla/4.0"
//ip -- [timestamp] "GET url HTTP/1.0" status code bytes "user agent".
我試圖寫它顯示的摘要:請求總量,申請的總量形成的文章目錄,所消耗的總帶寬以及404錯誤和他們的頁面數量。
PHP:
$handle = fopen('logfiles/april.log','r') or die ('File opening failed');
$requestsCount = 0;
while (!feof($handle)) {
$dd = fgets($handle);
$requestsCount++;
$parts = explode('"', $dd);
$statusCode = substr($parts[2], 0, 4);
}
fclose($handle);
這段代碼打開文件並統計記錄,方式隔開量,發現在記錄的狀態代號。當回顯$ statusCode時,它會顯示正確的信息,顯示日誌中的所有狀態碼。
接受兩個arguements以總價404錯誤的函數:
function requests404($l,$s) {
$r = substr_count($l,$s);
return "Total 404 errors: ".$r."<br />";
}
回聲結果:
echo requests404($statusCode, '404');
此功能不起作用,它只是返回0。txt文件工作在PHP中是我最弱的技能,我真的很感謝一些幫助,因爲我認爲我可能會以完全錯誤的方式去解決它。謝謝。
你考慮在每行正則表達式來分析和檢索具體的數據? –
快速檢查,您傳遞給requests404的$ statusCode是否可能僅包含日誌的最後一行? – emartel
我不這麼認爲,因爲當我回顯$ statusCode時,它會顯示所有代碼,並且將arguemnt更改爲'200'並不會使其顯示1爲總和。 – Tom