本文へスキップ

Clamini library

アクセスカウンター

 Image::Magickを使用した、アクセスカウンターの作り方を紹介しています。

アクセスカウンターの作り方

画像ファイルを作る


 まず、0から9までの画像ファイルを作ります。サイズは10×14程度で、ファイルネームは0.pngから9.pngまでの9種類を、 画像作成ソフトで作ります。作らずに、どこかから拾ってきても別にかまいません。


データファイルを作る


 次に、数値とアドレスの保存用ファイルcount.datを作ります。0,0のように、値はコンマで区切っています。


メインプログラムを作る


 メインとなるcount.cgiを作ります。今回作ったプログラムは下の通りですが、必要に応じて機能の拡張をするのが良いとは思います。 なお、今回製作したプログラムは、Image::Magickを使用しています。


設置する


 countフォルダ内に、ダミーindexファイルとcount.cgiを入れて、データ保存用フォルダdatと画像保存用フォルダimgも作ります。 2つのフォルダにはダミーindexファイルと、最初に作ったそれぞれのファイルを入れます。あとは、設置するサーバーに合わせて、適切なパーミッションを設定しましょう。


呼び出す


 画像を連結しているので、そのままIMGタグでHTMLから呼び出せば大丈夫です。


ソースコード


#!/usr/bin/perl

use strict;
use Image::Magick;

#初期設定

my $dirdata = "dat"; #データ保存フォルダ
my $dirimg = "img"; #画像保存フォルダ

#ファイル読み込み

open(CO,"+< ./$dirdata/count.dat")
 or die "file open error";
eval "flock(CO,2)";
my $data = <CO>;
(my $cnt, my $fileaddress)
 = split(/,/,$data);
my $useraddress = $ENV{'REMOTE_ADDR'};

#カウント数アップ

if ($useraddress ne $fileaddress) {
 $cnt++;
 truncate(CO,0);
 seek(CO,0,0);
 print CO "$cnt,$useraddress";
}
close(CO);

#画像連結

my $keta = length($cnt);
my $image = Image::Magick -> new;
my $num = '';
for (my $i = 0; $i < $keta ; ++$i) {
 $num = substr($cnt,$i,1);
 $image -> Read("./$dirimg/$num.png");
}
$image = $image
 -> Append(stack => 'false');

print "Content-type:image/png\n\n";

binmode (STDOUT);
$image -> Write('png:-');