昨日と今日のカウンタについて ご指摘下さい
昨日と今日のカウンタについて
カウンターが1こずつではなく、4つとか5つとかずつ増えてしまいます。ですが、html内の
<p>本日の数は<img src="./count.cgi?today">です</p>
<p>昨日の数は<img src="./count.cgi?yeaday">です</p>
を削除すると、ちゃんと1つずつカウントしていきます。(count.datの本日のカウント数もちゃんと1こずつ増えるのを確認しました。)
プログラムの何処が間違っているのでしょうか?アドバイスをお願い申し上げます。
<<count.cgi>>
#!C:\Perl\bin\perl
# 昨日と今日のカウントの取得
$ENV{'TZ'} = "JST-9";
$mday = (localtime(time))[3];
open (FILE, "<logday.dat") || die "File Open Err!-logday.dat\n";
$logday = <FILE>;
close(FILE);
($day, $yesday) = split(/:/, $logday); #それぞれ、今日の日付、昨日のカウント数に分ける
open(FILE,"<count.dat") || die "File Open Error!-count.dat\n";
$count = <FILE>; #変数countにデータを収納
close(FILE);
($count, $today) = split(/:/, $count); #それぞれ、トータルカウント数、今日の日付のカウント数に分ける
# 数をカウント
if($day == $mday){ #同日だったなら、トータルと本日のカウントだけ取る。
&totalcount();
}else{ #違っていたら、本日のカウント数を昨日へ、本日のカウントを0に、日にちを修正
$yesday = $today;
$today = 0;
open (FILE, ">count.dat") || die "File Open Err!-logday.dat\n";
flock(FILE,2);
print FILE "$count\:$today";
flock(FILE,8);
close(FILE);
open (FILE, ">logday.dat") || die "File Open Err!-logday.dat\n";
flock(FILE,2);
print FILE "$mday\:$yesday";
flock(FILE,8);
close(FILE);
&totalcount(); #その後カウントをとる
}
# 引数受取
$mode = $ENV{'QUERY_STRING'};
$mode =~ s/\W//g;
require "./gifcat.pl";
#画像表示のif文================
if($mode eq "total"){
&total();
}elsif($mode eq "today"){
&today();
}else{ &yestaday();}
exit;
# ログの更新================================
sub totalcount{
open(FILE, "+<count.dat") || die "File Open Error!\n";
flock(FILE,2);
$count++; #トータルカウント数にプラス1
$today++; #同じく本日のカウント数にもプラス1
seek(FILE, 0, 0);
print FILE "$count\:$today";
flock(FILE,8);
close(FILE);
}
# カウンタの数字に画像を付ける
sub total{
#トータルカウンタ=============
@countdata = split(//, $count);
foreach $cou(@countdata){
push(@view, "./img-t/$cou.gif");
}
#画像の出力===============
print "Content-type:image/gif\n\n";
binmode(STDOUT);
print &gifcat::gifcat(@view);
}
sub today{
#今日のカウンタ=============
@countdatadt = split(//, $today);
foreach $coudt(@countdatadt){
push(@viewdt, "./img-d/$coudt.gif");
}
#画像の出力===============
print "Content-type:image/gif\n\n";
binmode(STDOUT);
print &gifcat::gifcat(@viewdt);
}
sub yestaday{
#今日のカウンタ=============
@countdatady = split(//, $yesday);
foreach $coudy(@countdatady){
push(@viewdy, "./img-d/$coudy.gif");
}
#画像の出力===============
print "Content-type:image/gif\n\n";
binmode(STDOUT);
print &gifcat::gifcat(@viewdy);
}
<<count.html>>
<html>
<head>
<title>カウンタ</title>
</head>
<body>
<p>トータルカウント数は<img src="./count.cgi?total">です</p>
<p>本日の数は<img src="./count.cgi?today">です</p>
<p>昨日の数は<img src="./count.cgi?yeaday">です</p>
</body>
</html>
<<count.dat>>
トータル数:本日のカウント数
<<logday.dat>>
今日の日:昨日のカウント数
お礼
さっそく回答いただきましてありがとうがざいます。 count.datのパーミッションが間違っていました。 初歩的なミスですいません。 たすかりました^^