同じ所からのアクセス対応

カウンターのバージョンアップ

やっぱ、同じ所からのアクセスにはカウントアップしたくないね
って事で、過去20分間のアクセスデータを残しそれを比較する事で対応しました。


とにかくソース count.txt

#!/usr/local/bin/perl

# $count_data  = '/カウントファイルを指定';	#カウントデータ
# $access_data = '/ログ保存ファイルを指定';	#アクセス者データ

$keta = 6;	#何桁表示?

$now = time;	#ただいまの時刻
$svtime = $now + 1200;	#満了時刻算出 (20分)

$remoteaddx = $ENV{'HTTP_X_FORWARDED_FOR'};
$remoteaddr = $ENV{'REMOTE_ADDR'};
if ($remoteaddx ne "") {$remoteaddr = $remoteaddx ;}
$referer    = $ENV{'HTTP_REFERER'};

$line = "$svtime,$now,$remoteaddr,$referer,\n";

open(alist,"+<$access_data") || die "Access data file not found!\n" ;
 flock(alist,2);
 @fdt = ;

$find = "no";
@dt = ();

foreach $fline (@fdt) {
  ($etime,$stime,$name,$ref,$eol) = split(/\,/,$fline);
  if ($etime >= $now) {
    if ($name eq $remoteaddr) {
      $find = "yes";	#満了時間内で同じ人
    } else {
      push(@dt,$fline);
    }
  }
}

push(@dt,$line);	#自分自身の情報

open(cnt,"+<$count_data");
	$count = ;
	if ($find eq "no") {
		$count++;
		seek(cnt,0,0);	#出力桁数が減ることはないのでtruncate()不要
		print cnt $count;
	}
close(cnt);

seek(alist,0,0);	#先頭位置へポジションをセット
truncate(alist, 0);		#出力ファイルのサイズを0にセット
print alist @dt;
close(alist);

# 文字数のカウント&表示フォーマットへ

$pcount = "";

$i=length($count);
if ($i < $keta) {
	$pcount = '0' x ($keta - $i);	#0を繰り返す
}
$pcount .= $count;

print qq{<font size="-1">count : $pcount</font>};

exit;

変更点

自分の所で使ってみたいって方の変更点を上げておきます。
・1行目:パールの場所
・3〜4行目:カウントデータ・ログデータの保存場所
・6行目:カウント表示を最低何桁表示させるか
・63行目:SSI上での表示フォーマットを指定