※このサンプルの解説は、「CGI(Perl)の解説」をすべて読み終えてる方を前提としています。
後になるほど省略されている場合がありますのでできるだけ順番に読んでください。
また、実行に際しては、サーバーでPHPが利用できる事を前提に解説しています。
■ アクセスログ集計表を作る
それでは次に「アクセスログ集計表」を作成してみます。
アクセスログに記録した内容を読み取り、その値が同じものを集計しカウントする方法です。
本来、このような処理はデータベースの領域ですが、その手法さえ見つければもちろんPHPでも可能です。
今回はその中から、「エージェント」別に集計する方法を解説します。
このPHPスクリプトは以前作成した、「PHPサンプル」−「アクセスログを表組みで表示する」を利用します。
いつものことですが、
この処理を理解するには当然ですが、「HTML」の知識が必要になります。
解からない方は「HTMLの解説」で勉強してくださいね。
- 【 解 説 】
-
まず、以前と同じようにファイルからアクセスログデータを「$flist」という変数にセットしておきます。
$filnam = "acclogf.cgi"; $flist = file($filnam);次にこの「$flist」を順に読み出しながら「,(カンマ)」区切りで分解し、「エージェント」をキーとした連想配列を作り、その変数変数に「1」を加算していきます。
キーが同じものは、次々「1」が加算され、最終的に「エージェント」単位に集計したカウント数を取得することができます。
その方法は次のように記述できます。
foreach($flist as $strdat){ $strbuf = split(",", $strdat); $key = $strbuf[3]; $cntsum[$key]++; }この処理により取得された連想配列「$cntsum」をそのままテーブル(表組み)で表示すればいいのです。
連想配列のキーと値を取得する場合は次のような記述で取得できます。
foreach($cntsum as $key => $value){ print "キー:$key / 値:$value<br>\n"; }また、次のような方法もあります。
foreach (array_keys($cntsum) as $key){ print "キー:$key / 値:$cntsum[$key]<br>\n"; }※「array_keys()」は連想配列のキーだけを単純配列として返す命令です。
今回の項目数は集計項目である「エージェント」と「カウント数」の2項目になります。
では、上記の内容のように変更した「アクセスログ集計表」は次のようになります。
- 【記述サンプル】
- <?php print <<< END_DOC <HTML> <HEAD> <title>アクセスログ集計表を作る</title> </HEAD> <BODY> END_DOC; $filnam = "acclogf.cgi"; $flist = file($filnam); foreach($flist as $strdat){ $strbuf = split(",", $strdat); $key = $strbuf[3]; $cntsum[$key]++; } print <<< END_DOC <table border='1'> <tr> <th>エージェント</th> <th>カウント</th> </tr> END_DOC; foreach($cntsum as $key => $value){ print "<tr>\n"; print "<td>$key</td>\n"; print "<td>$value</td>\n"; print "</tr>\n"; } print "</table>\n"; print <<< END_DOC </BODY> </HTML> END_DOC; ?>