A01:毎日の来場者数を数える

訪れた累計人数を表示するカウンタを配置しているホームページは多いですが、自分でホームページを作っている人は、毎日どのくらいの人が自分のホームページを訪れているのか気になるものです。
今回は、その日に訪れた人数が分かるようなCGIを紹介します。
ただ数字が並ぶカウンタでは面白くないので、一定の人数ごとに画像が切り替わるようなCGIにしてみました。

ファイルを開く

解説
#!/usr/local/bin/perl
プロバイダがPerlを置いている場所を記述します。
ここでは/usr/local/bin/perlにあるとしています。
$max=10;
その日の来場者数が10人増えるごとに画像を切り替えます。
計算に使用するので10という数字を$maxに代入しています。
$image[0]="tree0.png";
$image[1]="tree1.png";
$image[2]="tree2.png";
$image[3]="tree3.png";
$image[4]="tree4.png";
$image[5]="tree5.png";
$image[6]="tree6.png";
$image[7]="tree7.png";
$image[8]="tree8.png";
$image[9]="tree9.png";
$image[10]="tree10.png";
表示する画像のファイル名を$image[xx]に代入しています。
0〜10の数字とファイル名を対応させる為に行っています。
open(FILE,"<count.dat");
$yesterday=(localtime((stat(FILE))[9]))[3];
$today=(localtime(time))[3];
$count=<FILE>
close(FILE);
ファイルに記録されている来場者数を$countに代入しています。
ファイルが保存された日付を$yesterdayに、今日の日付を$todayに代入しています。
☆今回のポイント☆
ファイル保存日と当日の日付を比較しよう!
if($yesterday!=$today){
  $count=0;
}
ファイルが保存された日付と今日の日付が違う時は、日付が変わったとして来場者数を0に戻しています。
$count++;
open(FILE,">count.dat");
print FILE "$count\n";
close(FILE);
来場者数を加算してファイルに記録しています。
$number=$count / $max;
if($number>10){
  $number=10;
}
来場者数を画像を切り替える人数で割った数字を$numberに代入しています。
画像のファイル名に対応した数字は0〜10なので、最大値が10になるようにしています。
printf("Content-type:image/png\n\n");
CGIとして出力するデータがPNG形式の画像である事を出力しています。
$size = -s $image[$number];
open(IN, $image[$number]);
binmode(IN);
read(IN, $buf, $size);
close(IN);
数字に対応した画像のファイル名を$image[$number]で指定して、データを読み込んでいます。
$sizeには、ファイル名を元にデータのサイズを取得して代入しています。
ファイルから読み込むデータがバイナリ形式なのでbinmode(IN)を書いています。
binmode(STDOUT);
print $buf;
画像のデータ本体を出力しています。
CGIとして出力するデータがバイナリ形式なのでbinmode(STDOUT)を書いています。
exit;
プログラムを終了させます。