Free CGI Perl PHP Script Olive Design CGI

カウンター その5

上のカウンターの応用で過去3日分のアクセス数を表示

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

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

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

サンプル

ソース counter05.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を同じフォルダにいれておく。
# 今までのカウンタ数を読み込んで変数に代入
#chomp関数を使って最後の改行コードを削除
  open(IN,"count.dat") ;
  chomp( @count = <IN> );
  close(IN);

#一日前の日付けとカウント数はsplice関数を使って[3]4番目に押入
  if ( $nitiji ne $count[2] ){
     $rec = "$count[2]	$count[1]";
     splice( @count,3,0,$rec );
     $count[1] = 0;
     $count[2] = $nitiji;
  }
  
#カウントアップ
  $count[0]++;
  $count[1]++;

#過去の日付け別カウント数の表示数を設定(3日分のアクセス数)
  $max_cnt = 3;
  if ($#count > ($max_cnt +1)){
    $#count = $max_cnt +1;
  }

# カウント書き込み
  open(OUT,">count.dat");
  foreach $rec ( @count ) {
    print OUT "$rec\n";
  }
  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 <<"HTML";
Content-type: text/html

<html><body>
<table border=2>
<tr><td>日付</td><td>件数</td></tr>
<tr><td>総数</td><td>$count[0]</td></tr>
<tr><td>$count[2]</td><td>$count[1]</td></tr>
HTML

foreach $aaa ( @count[3..$#count ] ){
 ( $dayday, $cnt ) = split( /	/, $aaa );
  print "<tr><td>$dayday</td><td>$cnt</td></tr>\n";
}


print <<"END";
</table>
</html></body>
END


exit;


__END__

Perl PHP Free CGI Script OliveDesign CGI

Perl PHP Free CGI Script OliveDesign CGI

プライバシーポリシー / 特定商取引法に基づく表示