B04:来場者ごとに閲覧回数で画像を変える

訪れた人ごとに閲覧回数を数え、その数によって表示内容を変化させたい場合もあると思います。
今回は、来場者ごとに閲覧回数を数えて表示する画像を変えるようなCGIを紹介します。
ページを閲覧した人のパソコンに情報を保存する事ができる、Cookieというものを利用しています。

ファイルを開く

解説
#!/usr/local/bin/perl
プロバイダがPerlを置いている場所を記述します。
ここでは/usr/local/bin/perlにあるとしています。
$max=10;
@picture=("0.png","1.png","2.png","3.png","4.png","5.png","6.png","7.png","8.png","9.png");
表示する絵の枚数を$maxに、ファイル名を@pictureに代入しています。
@weekchar=("Sun","Mon","Tue","Wed","Thu","Fri","Sat");
@monchar=("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
Cookieに保存する時に曜日と月の文字列が必要になるので配列に代入しています。
foreach $data (split(/; */,$ENV{'HTTP_COOKIE'})){
  ($name,$value)=split(/=/,$data);
  $COOKIE{$name}=$value;
}
Cookieの情報を取得して解析しています。
$count=$COOKIE{'KMCGIB04'};
if($count eq ""){
  $count=1;
}else{
  $count=$count+1;
  if($count==($max+1)){
    $count=1;
  }
}
ここではKMCGIB04という名前でCookieに保存されている情報を取得しています。
取得した情報は閲覧回数として使用し、数字によって表示する画像を変化させます。
画像の枚数には限りがあるので、数字が枚数を超えたら初期化しています。
($sec,$min,$hour,$mday,$mon,$year,$week)=gmtime(time()+60*60*24*30);
$year=$year+1900;
$time=sprintf("%s, %d-%s-%d %02d:%02d:%02d GMT",$weekchar[$week],$mday,$monchar[$mon],$year,$hour,$min,$sec);
time()は時刻が秒数で取得できるので、60*60*24*30を加算して一ヵ月後にしています。
gmtimeを使うとGMTによる時刻に変換できます。
CookieはGMTによる時刻で保存期間を指定できるので、その為の文字列を$timeに代入しています。
printf("Content-type:image/png\n");
printf("Set-Cookie:KMCGIB04=$count; expires=$time;\n\n");
$size = -s $picture[$count-1];
open(OUT, $picture[$count-1]);
binmode(OUT);
read(OUT, $buf, $size);
close(OUT);
binmode(STDOUT);
print $buf;
CookieにKMCGIB04という名前で情報を保存しつつ、$picture[$count-1]が示すファイル名の画像を出力しています。
Cookieには加算済みの値である$countを保存するので、表示する画像は$count-1番目を選択しています。
☆今回のポイント☆
Cookieに保存する値と現在使用する値を決めよう!
exit;
プログラムを終了させます。