※このサンプルの解説は、「CGI(Perl)の解説」をすべて読み終えてる方を前提としています。
■ グラフィックカウンタの作成(SSI形式)
さて、今回はグラフィック型のアクセスカウンタを作成する方法を説明してみましょう。
文字型カウンタなら記録している文字(カウント数)をそのまま表示(出力)すればそれで済cite、グラフィック型のアクセスカウンタとなるとその表示(出力)方法が変わってきます。
様々な手法が考えられますが、今回はSSI形式なので比較的簡単な方法を説明してみたいと思います。
それは、各桁の数字を「IMGタグの数字画像を表示」に書き換えてしまう方法です。
それと、グラフィックカウンタということなので当然画像が必要になります。
画像は、数字の「0」〜「9」に対応した画像
、「0.gif」〜「9.gif」が用意されているとします。
これらの画像についてはこのサイトの「フリー素材」にある「アクセスカウンタ」関係から入手すれば簡単でいいでしょう。
- 【 解 説 】
-
グラフィックカウンタと言えど、基本的な作りは一般的な文字型カウンタと同じです。
問題は文字→グラフィックへの変換方法だと思います。まず、この処理のためには、カウンタの桁数を取得する必要があります。
カウンタの桁数は常に増え続けますから、現在のカウンタの桁数に合わせて処理をしないといけないからです。
カウンタが変数「$totalc」に入ってる場合、その桁数を取得するには、「length()」関数を使用して次のように記述できます。
$ketat = length($totalc);次に、カウンタの文字列を1桁ずつに分解して変数にセットします。
それには「CGI(Perl)の解説」で解説した「substr()」関数を使用して、次のように記述できます。
for $i (0..$ketat-1){ $suji = substr($totalc, $i, 1); }
※..「for $i (0..$ketat-1){}」は、「for」文の簡易的な記述方法です。
詳しくは、「CGI(Perl)の解説」−「8.変数と繰り返し」を参照してください。前述のようにして取得した各桁を画像表示のタグに書き換え、出力します。
その方法は次の通りです。
for $i (0..$ketat-1){ $suji = substr($totalc, $i, 1); print "<img src='$suji.gif'>"; }アクセスカウンタの基本部分は今まで解説したとおりで、次のような記述ですね。
$filnam = "gcntsf.cgi"; open(FP,"<$filnam"); $totalc = <FP>; close(FP); $totalc++; $filnam = "gcntsf.cgi"; open(FP,">$filnam"); print FP "$totalc"; close(FP);今回、カウンタのファイル名は「gcntsf.cgi」としました。
このファイル名は何でもいいのですが、セキュリティの意味で拡張子は「.cgi」
にしておくことをお勧めします。このようにしておくと、訪問者がこのファイルを覗こうとした時、自動的にCGIとして実行しようとしますが、中身がCGIではないのでエラーが発生します。
したがって、覗こうとしてもエラーが発生して覗けなくなるからです。
では、上記の内容を使用して「グラフィック型のアクセスカウンタ」を作成してみます。
なお、今回のサンプルでは排他制御(同時書き込み時の制御)は行っていません。
Windows環境の排他制御については「CGI(Perl)の予備知識」−「ファイル書き込みの排他制御」をご参照下さい。
- 【記述サンプル】
- #!/usr/bin/perl $filnam = "gcntsf.cgi"; open(FP,"<$filnam"); $totalc = <FP>; close(FP); $totalc++; $filnam = "gcntsf.cgi"; open(FP,">$filnam"); print FP "$totalc"; close(FP); $ketat = length($totalc); for $i (0..$ketat-1){ $suji = substr($totalc, $i, 1); print "<img src='$suji.gif'>"; }