Free CGI Perl PHP Script Olive Design CGI

カウンター その3

カウンターのログ保存数を設定できるようにしました。

ファイル名counter03.cgiを作成し、下のソースを貼り付けてパーミションを755にします。

アクセスログ記録用空ファイルをaccess.dat作成し、パーミションを666にします。

データ保存用ファイル空ファイルをcount.dat作成し、パーミションを666にします。

ソース counter03.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" );

#ログ保存数を設定($# は変数のインデックスの最大値を求める記述)
  $data_max = 10;
    if ($#accesslog > ($data_max -1)){
      $#accesslog = $data_max - 1;
    }
#アクセスファイル書き出し
  print ACCESSFILE @accesslog;
  close(ACCESSFILE);
}

#2回目以降訪問の場合
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__

Perl PHP Free CGI Script OliveDesign CGI

Perl PHP Free CGI Script OliveDesign CGI