#!/usr/local/bin/perl # ---------------------------------------------------------------------------------- # ---------------------------------------------------------------------------------- # # ********************************************************************************** # オプション設定 ↓ここから # ********************************************************************************** $digit = '4'; # 総数カウンターの桁数 $digit1 = '3'; # 本日、昨日カウンターの桁数 $log_day = '3'; # ログの最大記録数(特に変更の必要なし) $datafile = './cgi/counter/t_counter.dat'; # カウンターデータファイルの位置 $lock = 0; # ロック機能(1:使用する  0:使用しない) $lockfile = './cgi/counter/lock/t_counter.lock'; # ロックファイル名(通常はこのままで結構です) # ********************************************************************************** # オプション設定終わり ↑ここまで # ---------------------------------------------------------------------------------- # これ以降書き換えをする場合は、個人の責任で行って下さい。 # ********************************************************************************** # [メイン処理] if ($lock) { foreach $i ( 1, 2, 3, 4, 5, 6 ) { if (mkdir("$lockfile", 0755)) { last; } elsif ($i == 1) { local($mtime) = (stat($lockfile))[9]; if ($mtime < time() - 600) { rmdir($lockfile); } } elsif ($i < 6) { sleep(1); } else { exit(1); } } } sub sigexit { rmdir($lockfile); exit(0); } $SIG{'PIPE'} = $SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = "sigexit"; if (open(FILE,$datafile)) { @DATE = ; } $log_date = @DATE; # 最大記録数より多ければ古い記事を削除する $m = 0; foreach $log (@DATE) { $m++; if ($m == ($log_day + 1)) { last; } push(@NEW,$log); } @DATE = @NEW; $n_count = 1; local($date,$count,$total) = split(/,/,$DATE[0]); local($now_date) = &time; $count = $count + 1; $total++; $value = "$now_date,$n_count,$total\n"; if ($now_date eq $date) { $DATE[0] = "$date,$count,$total\n"; } else { unshift(@DATE,$value); } if (!open(OUT, ">$datafile")) { &error(bat_file); } print OUT @DATE; close (OUT); if ($lock) { rmdir($lockfile); } foreach $log (@DATE) { ($date,$count,$total) = split(/,/,$DATE[0]); $count = sprintf("%0" . "$digit1" . "\d",$count); $total = sprintf("%0" . "$digit" . "\d",$total); } foreach $log (@DATE) { ($ydate,$ycount,$ytotal) = split(/,/,$DATE[1]); $ycount = sprintf("%0" . "$digit1" . "\d",$ycount); } print "
$total番目\n"; exit; # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # [現在時刻を取得] sub time{ $ENV{'TZ'} = "JST-9"; ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(); $year = $year + 1900; $mon = sprintf("%.2d",$mon +1); $mday = sprintf("%.2d",$mday); $hour = sprintf("%.2d",$hour); $min = sprintf("%.2d",$min); $sec = sprintf("%.2d",$sec); # 曜日を日本語化 @week = ('日','月','火','水','木','金','土'); $wday = $week[$wday]; local($date) = "$year年$mon月$mday日"; return ($date); }