サーバーログファイルがあり、そこから、保存されているデータを要約した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".
私は、リクエストの合計量、articlesディレクトリからのリクエストの合計量、消費された帯域幅の合計、そして最後に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をエコーすると、正しい情報が表示され、ログ内のすべてのステータスコードが表示されます。
404エラーを合計するために2つの引数を受け入れる関数:
function requests404($l,$s) {
$r = substr_count($l,$s);
return "Total 404 errors: ".$r."<br />";
}
結果をエコーします。
echo requests404($statusCode, '404');
この関数は機能せず、0を返すだけです。PHPでtxtファイルを操作することは私の最も弱いスキルであり、完全に間違った方法で行っている可能性があるので、助けていただければ幸いです。ありがとう。