カウンターで重複カウントの防止について
勉強がてら以下のようなカウンターをつくりたいと思っています。
1 画像つきのカウンタである
2 重複カウンタを防止したい
3 昨日と今日のカウンターも表示させたい
で、2でけつまずきました。
何がいけないのでしょうか?
以下のプログラムだと更新毎にカウンターが回ってしまいます。
ご指摘下さい。よろしくお願い申し上げます。
#!C:\Perl\bin\perl
$flg = 0;
#IPアドレスの取得と重複カウントの防止============
$ipadd = $ENV{'REMOTE_ADDR'}; #IPアドレスの取得
open (FILE, "<logcount.dat") || die "File Open Err!-logcount.dat\n"; #データをすべて配列logdataに読み込む
@logdata = <FILE>;
close(FILE);
#取得したIPアドレスと履歴のIPアドレスを比較======
for($i=0; $i<=$#logdata; $i++){
if($ipadd eq $logdata[$i]){ #新規のIPデータと過去ログのIPデータが等しかったら
$flg = 1; #合致するのは1つのアドレスのみ
}
}
#====================================================================
# $flg = 0 だったら、数をカウント
#====================================================================
open(FILE,"<count.dat") || die "File Open Error!-count.dat\n"; #カウントデータの読み込み
$count = <FILE>; #変数countにデータを収納
close(FILE);
if($flg == 1){
$data = $count;
}else{
$data = ++$count; #プラス1をカウント
# ログの更新==================================
open(FILE, "+<count.dat") || die "File Open Error!\n";
flock(FILE,2);
seek(FILE, 0, 0); #.datに上書き保存する為にデータの記位置を調整
print FILE $data; #カウントを記録
flock(FILE,8);
close(FILE);
# IPアドレスを更新=============================
open (FILE, ">>logcount.dat") || die "File Open Err!-logcount.dat\n";
print FILE $ipadd,"\n";
close(FILE);
}
print $data;
#====================================================================
# カウンタの数字に画像を付ける
#====================================================================
@count = split(//, $data);
foreach $cou(@count){
push(@view, "./img/$cou.gif");
}
require "./gifcat.pl";
print "Content-type:image/gif\n\n";
binmode(STDOUT);
print &gifcat::gifcat(@view);
お礼
ありがとうございます。 一斉収集などやられたらどうしようもないですね。 今は a ref でリンクしていますが、onclick にすれば解決するのかなとか考えていますが、フォルダの位置関係なのかうまく動かなくて。 onclickなら変な収集はされないのですかね? 確かにカウンタなどはあてにならないのですが、著作権協会申請受理もので正式にやっているものですから、正確に件数を取る必要がありまして。 普通はどうやっているのでしょうかね。 ORAKU1951さんありがとうございます。
補足
Ref~ から OnClick にして開始されたようです。 ご示唆ありがとうございました。