カウンター その2
時間表示スクリプトを応用し、同じIPアドレスからは一日に一度しかカウントアップしないように制御してあります。
ファイル名counter02.cgiを作成し、下のソースを貼り付けてパーミションを755にします。
アクセスログ記録用空ファイルをaccess.dat作成し、パーミションを666にします。
ソース counter02.cgi
#!/usr/bin/perl
#カウンター
#現在の時刻とIPアドレスを読み込み
($sec,$min,$hour,$day,$mon,$year,$wday) = localtime(time);
$nitiji=sprintf("%04d年%02d月%02d日",$year +1900,$mon +1,$day);
$addr=$ENV{'REMOTE_ADDR'};
#アクセスファイルオープン
open(ACCESSFILE, "access.dat");
@accesslog = <ACCESSFILE>;
close(ACCESSFILE);
#今日始めての訪問か判定する(一日に一カウントする)
$today = 0;
foreach ( @accesslog ) {
if(( /$nitiji/ ) && ( /$addr/ )){ $today = 1; }
}
if ( $today == 0 ){
#データ保存用ファイルcount.datを同じフォルダにいれておく。
# 今までのカウンタ数を読み込んで変数に代入
open(IN,"count.dat") ;
$count = <IN>;
close(IN);
#カウントアップ
++$count;
# カウント書き込み
open(OUT,">count.dat");
print OUT "$count";
close(OUT);
open(ACCESSFILE, ">access.dat");
unshift (@accesslog, "$nitiji $addr\n" );
print ACCESSFILE @accesslog;
close(ACCESSFILE);
}
else {
open(COUNTIN,"count.dat") ;
$count = <COUNTIN>;
close(COUNTIN);
}
# 出力ブラウザにカウントアップした値を表示。
#「printf」は書式を付けてプリントする命令。
#「f」は書式(フォーマット)の意味。
#"%04d"が書式の指定です。
#"%04d"と書くと「4桁で先頭に0を付けて値を入れる」という意味。
print "Content-type: text/html\n\n";
print "<html><body>\n";
printf("%04d\n", $count);
print "</html></body>\n";
exit;
__END__
|
