Free CGI Perl PHP Script Olive Design CGI

カウンター その6

アクセスログとカウンターログを一つにまとめてみました。

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

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

ソース counter06.cgi

#!/usr/bin/perl
#カウンター
#ログファイル一つにまとめる
#読み込みファイルcount.datはCGI設置フォルダと同じところに設置
#現在の時刻と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(IN, "count.dat");
chomp( @count = <IN> );
close(IN);

#今日始めての訪問か判定する
$today = 0;
foreach(@count ){
  if( /$nitiji	$addr/){ $today = 1; }
}

#今日始めての訪問の場合
if ( $today == 0 ){

#一日前の日付けとカウント数は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]++;
#アクセスログはsplice関数を使って[4]5番目に押入
  $rec2 = "$nitiji	$addr";
  splice( @count,4,0,$rec2 );

#アクセスログの記憶数
  $data_max = 15;
  if ($#count > ($data_max +3)){
    $#count = $data_max +3;
  }

# カウント書き込み
  open(OUT,">count.dat");
  foreach $rec ( @count ) {
    print OUT "$rec\n";
  }
  close(OUT);

}

#2回目以降訪問の場合
else {
  open(COUNTIN,"count.dat") ;
  @count = <COUNTIN>;
  close(COUNTIN);
}

# 出力ブラウザにカウントアップした値を表示。

#昨日の件数
( $yestaday,$yestaday_count ) = split( /	/,$count[3] );

#今日の件数
$today_count = $count[1];

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>今日のカウント</td><td>$today_count</td></tr>
<tr><td>昨日のカウント</td><td>
HTML
#昨日のカウント数がない場合の処理
if ($yestaday_count eq $addr ){
  print ' '; 
}
else {
  print "$yestaday_count\n";
}

print <<"END";
</td></tr>

</table>
</body>
</html>

END


exit;


__END__

Perl PHP Free CGI Script OliveDesign CGI

Perl PHP Free CGI Script OliveDesign CGI

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