ログを時間ごとにロールし、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 ログ ファイルを区切ります
www.MyException.Cn ネットユーザーが共有in: 2015- 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.gif HTTP/1.0 " 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"
クライアントの IP アドレス。
client identd プロセスによって決定される RFC1413 ID。出力内の記号「-」は、ここでの情報が無効であることを示します。
Web ページにアクセスするために HTTP 認証システムによって取得されるクライアント ID (ユーザー ID)。Web ページがパスワードで保護されていない場合、この項目は「-」になります。
サーバーがリクエストの処理を完了する時刻。
クライアントのアクションによって要求されたリソースによって使用されるプロトコル。
サーバーからクライアントに返されるステータス コード。
応答ヘッダーを除いてクライアントに返されるバイト数。情報が返されない場合、この項目は「-」になります。
「リファラー」リクエストヘッダー。
「User-Agent」リクエストヘッダー。
情報の抽出に使用される正規表現は次で構成されます:
^: 各行の先頭と一致します。
([0-9.]+)s : IP アドレスと一致します。
([w.-]+)s: 数字、文字、アンダースコア、またはドット区切り文字で構成される ID と一致します。
([w.-]+)s: 数字、文字、アンダースコア、またはドット区切り文字で構成されるユーザー ID と一致します。
([[^[]]+])s: マッチング時間。
"((?:[^"]|")+)"s: リクエスト情報の照合。エスケープされた二重引用符が二重引用符で囲まれている場合があります。
(d{3})s: ステータス コードの照合。 s: 応答バイト数または - と一致します。
"((?:[^"]|")+)"s: 「Referer」リクエスト ヘッダーと一致します。エスケープされた二重引用符が二重引用符内に表示される場合があります。
"((?:[^"]|")+)": 「User-Agent」リクエスト ヘッダーと一致し、二重引用符内にエスケープされた二重引用符が含まれる場合があります。
$: 行末と一致します。最終式は次のようになります:
^([0-9.]+)s([w.-]+)s([w.-]+)s([[^[]]+])s"((? :[^ "]|")+)"s(d{3})s(d+|-)s"((?:[^"]|")+)"s"((?:[^"] |") +)"$
上記は、PHP の通常の解析 Apache ログ ファイルを内容も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。