;
close(IN);
# 前バージョン変換処理
if ($data =~ /<>/) { ($daykey,$data) = split(/<>/, $data); }
# 記録ファイルを分解
($count,$ip) = split(/:/, $data);
# IPチェック
$flag=0;
if ($ip_chk && $addr eq "$ip") { $flag=1; }
# ログ更新
if (!$flag) {
# カウントアップ
$count++;
# ファイルをフォーマット
if ($ip_chk) { $data = "$count\:$addr"; }
else { $data = "$count"; }
# 記録ファイルを更新する
open(OUT,">$logfile") || &error;
print OUT $data;
close(OUT);
}
# ロック解除
if (-e $lockfile) { unlink($lockfile); }
}
## 乱数発生
if ($mode eq "rand") {
srand;
$count = rand;
$count = int($count * 10000);
# デフォルト桁数を定義
if ($fig eq "") { $fig = 5; }
}
## GIF画像を出力
&count_view;
exit;
#---------------#
# GIF出力処理 #
#---------------#
sub count_view {
# 時間表示およびカレンダ表示処理
if ($mode eq "time" || $mode eq "date" || $in{'file'} || $in{'size'}) {
@GIF = ();
foreach (0 .. $#caras) { push(@GIF, "$gifdir/$caras[$_].gif"); }
}
# カウンタ表示処理
else {
while (length($count) < $fig) { $count = '0' . $count; }
$length = length($count);
@GIF=();
foreach (0 .. $length-1) {
$n = substr($count,$_,1);
push(@GIF,"$gifdir/$n\.gif");
}
}
print "Content-type: image/gif\n\n";
binmode(STDOUT);
print &gifcat'gifcat(@GIF);
}
#-----------------------------------#
# ロックファイル処理:symlink関数 #
#-----------------------------------#
sub lock1 {
local($retry) = 5;
while (!symlink(".", $lockfile)) {
if (--$retry <= 0) { &error; }
sleep(1);
}
}
#--------------------------------#
# ロックファイル処理:open関数 #
#--------------------------------#
sub lock2 {
local($retry) = 0;
foreach (1 .. 5) {
if (-e $lockfile) { sleep(1); }
else {
open(LOCK,">$lockfile") || &error;
close(LOCK);
$retry = 1;
last;
}
}
if (!$retry) { &error; }
}
#--------------#
# 時間を取得 #
#--------------#
sub get_time {
$ENV{'TZ'} = "JST-9";
$times = time;
if ($_[0]) { $times = $_[0]; }
($sec,$min,$hour,$mday,$mon,$year) = localtime($times);
$year += 1900;
$mon++;
if ($hour < 10) { $hour = "0$hour"; }
if ($min < 10) { $min = "0$min"; }
if ($mon < 10) { $mon = "0$mon"; }
if ($mday < 10) { $mday = "0$mday"; }
}
#--------------#
# エラー処理 #
#--------------#
sub error {
if (-e $lockfile) { unlink($lockfile); }
@err_gif = ('47','49','46','38','39','61','2d','00','0f','00','80','00','00','00','00','00','ff','ff','ff','2c', '00','00','00','00','2d','00','0f','00','00','02','49','8c','8f','a9','cb','ed','0f','a3','9c','34', '81','7b','03','ce','7a','23','7c','6c','00','c4','19','5c','76','8e','dd','ca','96','8c','9b','b6', '63','89','aa','ee','22','ca','3a','3d','db','6a','03','f3','74','40','ac','55','ee','11','dc','f9', '42','bd','22','f0','a7','34','2d','63','4e','9c','87','c7','93','fe','b2','95','ae','f7','0b','0e', '8b','c7','de','02','00','3b');
print "Content-type: image/gif\n\n";
foreach (@err_gif) {
$data = pack('C*',hex($_));
print $data;
}
exit;
}
#------------------#
# チェックモード #
#------------------#
sub check {
print "Content-type: text/html\n\n";
print "DREAM COUNTER\n";
print "\nCheck Mode
\n\n";
# ログファイル検索
opendir(DIR,"$LogDir")
|| print "- ディレクトリを認識できません: $LogDir\n";
# @dir = readdir(DIR);
@dir = grep { /\.dat$/ && -f "$LogDir$_" } readdir(DIR);
closedir(DIR);
$flag=0;
foreach (@dir) {
$target = "$LogDir$_";
# if (-d "$LogDir$_") { next; }
# if ($_ !~ /(.+)\.dat$/) { next; }
if (-r $target && -w $target) { print "
- $_ : パーミッションOK \n"; }
elsif (!-r $target) { print "
- $_ : 読込みパーミッションNG \n"; }
elsif (!-w $target) { print "
- $_ : 書込みパーミッションNG \n"; }
$flag=1;
}
if (!$flag) { print "
- ログファイルが存在しません\n"; }
if ($gif ne "") { $target_dir = $gifdir; }
else { $target_dir = $defodir; }
# 画像ディレクトリのパス確認
if (-d $target_dir) { print "
- $target_dir : 画像ディレクトリのパス : OK! \n"; }
else { print "
- $target_dir : 画像ディレクトリがありません\n"; }
# 画像チェック
@GifFile = ("0".."9", "a", "p", "c", "d");
foreach (@GifFile) {
$target = "$target_dir\/$_\.gif";
if (-e "$target") { print "
- $target : 画像OK \n"; }
else { print "
- $target : 画像がありません\n"; }
}
# 著作権表示:削除改変を禁止します
print "
\n\n";
print "Copyright(C) Kent Web 2001\n";
print "\n\n";
exit;
}