|
アクセスカウンタにはテキスト形式のものと画像形式のものがあります。
SSIが使用出来るサーバであればアクセスカウンタを表示したい場所にSSIコマンドを記述すればよいのですが、SSIを使用不可とするサーバが少なくありません。
SSIを使用せずにアクセスカウンタを表示させる方法としてよく使われるのが<img>タグでCGIを呼び出す方法です。
例えば<img src="./counter.cgi" />としてcounter.cgiを呼び出します。
<img>タグで呼び出すわけですから画像形式のアクセスカウンタを作成する事しか出来ませんが、SSIを使用せずにアクセスカウンタを表示させる事が可能です。
|
|
|
しかし、この場合は1つの<img>タグでアクセスカウンタを表示させるのですからカウンタの各桁の画像を1つの画像に連結する必要があります。
ここでは、その画像連結を行ってくれるgifcat.pl(GIF画像連結ライブラリ)を使用してアクセスカウンタを作成します。
|
|
|
まず、カウンタ値を記録するログファイルと0〜9のカウンタ画像を用意します。
カウンタ画像のファイル名は順に0.gif〜9.gifとします。
カウンタ値をログファイルから読み込み、1を加算した後にログファイルを更新します。
表示するカウンタ値が35だとすると3と5のカウンタ画像のファイル名(ファイルパス)をgifcat.plに送ります。
すると35という1つの画像に連結が行われます。
あとは連結された画像を表示するだけです。
|
|
■カウンタ画像のファイル名(ファイルパス)を配列に格納する
カウンタ画像のファイル名(ファイルパス)を配列に1つずつ格納します。
配列名を@GIFとして、表示するカウンタ値($countに格納されているものとします)が35だとすると$GIF[0]に「3.gif」を、$GIF[1]に「5.gif」を格納します。
|
|
@GIF = ();
foreach (split(//, $count)) {
my($filename) = "$_.gif";
push(@GIF, $filename);
}
|
|
|
■配列をgifcat.plに送り、連結されたカウンタ画像を表示する
|
|
print "Content-type: image/gif\n\n";
binmode(STDOUT);
print &gifcat'gifcat(@GIF);
die;
まずGIF画像を表示する為のMIMEヘッダを出力します。
次にbinmode関数でバイナリモードへ変更します。
これでカウンタ画像を表示する準備が整いましたので、配列@GIFをgifcat.plに送ります。
これで配列@GIFに格納されたファイル名(カウンタ画像のファイルパス)に対応する画像が順に連結され表示されます。
最後にdie関数で処理を終わります。
|
|
gifcat.plで画像連結に使用するGIF画像には以下の制約があります。
・インターレスGIF不可
・アニメGIF不可
・透過GIF不可
・画像の高さは全て同じとする(横幅は異なっても良い)
|
|
open(IN, "<$countlog") || die($!);
画像形式のアクセスカウンタのCGIですからテキストでエラー画面を表示する事は出来ません。
このような場合は処理を強制的に終了する為にdie又はexit関数を使います。
|
|
□更新履歴
2007.04.27 全体的に内容を見直し
|
|
|