※このサンプルの解説は、「CGI(Perl)の解説」をすべて読み終えてる方を前提としています。

■ アクセスログ集計表を作る

それでは最後に「アクセスログ集計表」を作成してみます。
アクセスログに記録した内容を読み取り、その値が同じものを集計する方法です。
本来、このような処理はデータベースの領域ですが、Perlでもその手法により可能です。
今回はその中から、「エージェント」別に集計する方法を解説します。

このCGIは以前作成した、「アクセスログを表組みで表示する」を利用します。

いつものことですが、 この処理を理解するには当然ですが、「HTML」の知識が必要になります。
解からない方は「HTMLの解説」で勉強してくださいね。

【 解    説 】

まず、以前と同じようにファイルからアクセスログデータを「@flist」という変数にセットしておきます。
$filnam = "acclogf.cgi"; open(FP,"<$filnam"); @flist = <FP>; close(FP);

次にこの「@flist」を順に読み出しながら「,(カンマ)」区切りで分解し、「エージェント」をキーとしたハッシュを作り、その変数「1」を加算していきます。
キーが同じものは、次々「1」が加算され、最終的に「エージェント」単位に集計したカウント数を取得することができます。
その方法は次のように記述できます。
foreach $strdat (@flist){ @strbuf = split(/,/, $strdat); $key = $strbuf[3]; $cntsum{$key}++; }

この処理により取得されたハッシュ「%cntsum」をそのままテーブル(表組み)で表示すればいいのです。
今回の項目数は集計項目である「エージェント」「カウント数」の2項目になります。

では、上記の内容のように変更した「アクセスログ集計表」は次のようになります。

【記述サンプル】
#!/usr/bin/perl
$filnam = "acclogf.cgi"; open(FP,"<$filnam"); @flist = <FP>; close(FP);
foreach $strdat (@flist){   @strbuf = split(/,/, $strdat);   $key = $strbuf[3];   $cntsum{$key}++; }
print << "END_OF_DOC"; <table border='1'> <tr> <th>エージェント</th> <th>カウント</th> </tr> END_OF_DOC
foreach $key (keys %cntsum){   print "<tr>\n";   print "<td>$key</td>\n";   print "<td>$cntsum{$key}</td>\n";   print "</tr>\n"; } print "</table>\n";
◆実行結果について

上記のサンプルを「aclogsm.cgi」という名前で保存して実行してみてください。

実行結果はこちらをクリックしてください。
なお、実行結果については、各々のサーバーの環境、ユーザーの環境にによって内容は変わってきます。


page update:2010/01/23 20:32

Copyright (c) 2000-2009, all Rights Reserved & Produced by atom