#!/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, "access2.dat"); @accesslog = ; close(ACCESSFILE); #今日始めての訪問か判定する $today = 0; foreach(@accesslog ){if( /$nitiji\t$addr/){ $today = 1; } } #今日始めての訪問の場合 if ( $today == 0 ){ #データ保存用ファイルcount.datを同じフォルダにいれておく。 # 今までのカウンタ数を読み込んで変数に代入 #chomp関数を使って最後の改行コードを削除 open(IN,"count2.dat") ; chomp( @count = ); close(IN); #一日前の日付けとカウント数はsplice関数を使って[3]4番目に押入 if ( $nitiji ne $count[2] ){ $rec = "$count[2]\t$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,">count2.dat"); foreach $rec ( @count ) { print OUT "$rec\n"; } close(OUT); open(ACCESSFILE, ">access2.dat"); unshift (@accesslog, "$nitiji\t$addr\n" ); #ログ保存数を設定($# は変数のインデックスの最大値を求める記述) $data_max = 10; if ($#accesslog > ($data_max -1)){ $#accesslog = $data_max - 1; } #アクセスファイル書き出し print ACCESSFILE @accesslog; close(ACCESSFILE); } #2回目以降訪問の場合 else { open(COUNTIN,"count2.dat") ; @count = ; close(COUNTIN); } # 出力ブラウザにカウントアップした値を表示。 #「printf」は書式を付けてプリントする命令。 #「f」は書式(フォーマット)の意味。 #"%04d"が書式の指定です。 #"%04d"と書くと「4桁で先頭に0を付けて値を入れる」という意味。 print <<"HTML"; Content-type: text/html HTML foreach $aaa ( @count[3..$#count ] ){ ( $dayday, $cnt ) = split( /\t/, $aaa ); print "\n"; } print <<"END";
日付件数
総数$count[0]
$count[2]$count[1]
$dayday$cnt
END exit; __END__