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:-');