#!/usr/local/bin/perl

#┌─────────────────────────────────
#│  DAY COUNTER-EX v3.5 (2003/07/04)
#│  Copyright (c) KentWeb
#│  webmaster@kent-web.com
#│  http://www.kent-web.com/
#└─────────────────────────────────
$ver = 'DayX v3.5';
#┌─────────────────────────────────
#│ [注意事項]
#│ 1. このスクリプトはフリーソフトです。このスクリプトを使用した
#│    いかなる損害に対して作者は一切の責任を負いません。
#│ 2. 設置に関する質問はサポート掲示板にお願いいたします。
#│    直接メールによる質問は一切お受けいたしておりません。
#└─────────────────────────────────
#
# [タグの書き方の例]
#   総カウント数     <img src="dayx/dayx.pl?gif">
#   本日のカウント数 <img src="dayx/dayx.pl?today">
#   昨日　　〃	     <img src="dayx/dayx.pl?yes">
#
# [日計／月次一覧を見る]
#    http://www.host.xxx/~user/dayx/dayxmgr.pl
#
# [チェックのしかた (ブラウザから最後に ?check をつけて呼出す）]
#    http://www.host.xxx/~user/dayx/dayx.pl?check
#
# [ディレクトリ構成例 (括弧内はパーミッション) ]
#
#    public_html / index.html ... ここにカウンタを設置
#        |
#        +-- dayx / dayx.pl    [755]
#               |    dayxmgr.pl [755]
#               |    gifcat.pl   [644]
#               |    dayx.dat    [666]
#               |    day.dat     [666]
#               |    mon.dat     [666]
#               |    blue.gif
#               |    red.gif
#               |
#               +-- gif1 / 1.gif 2.gif ... 0.gif
#               |
#               +-- gif2 / 1.gif 2.gif ... 0.gif
#               |
#               +-- lock [777] /

#============#
#  設定項目  #
#============#

# 画像連結ライブラリ取込み
require './gifcat.pl';

# カウント数の桁数
$digit1 = 1;
$digit2 = 2;
$digit3 = 3;
$digit4 = 4;
$digit5 = 5;
$digit6 = 6;
$digit7 = 7;
$digit8 = 8;
$digit9 = 9;

# 本日/昨日御来訪のIP総数の桁数
#$digit2 = 4;

# 御来訪IP総数の桁数
#$digit3 = 8;

# クリック総数の桁数
#$digit4 = 8;

# PROXY IP総数の桁数
#$digit5 = 6;

# TODAY NEW IP総数の桁数
#$digit6 = 4;

# TODAY NEW PROXY IP総数の桁数
#$digit7 = 4;

# TODAY OLD IP総数の桁数
#$digit8 = 4;

# TODAY OLD PROXY IP総数の桁数
#$digit9 = 4;

# ログファイル
$logfile = "./dayx.dat";
$logfile_next = "./dayy.dat";

# 日次記録ファイル
$dayfile = "./day.dat";

# 月次記録ファイル
$monfile = "./mon.dat";

# 総カウント数用GIF画像のディレクトリ
$gifdir1 = "./gif1";

# 本/昨日カウント数用GIF画像のディレクトリ
$gifdir2 = "./gif2";

# 内訳カウント数用GIF画像のディレクトリ
$gifdir3 = "./gif3";

# ファイルロック機構
#   0 : しない
#   1 : する (symlink関数式)
#   2 : する (mkdir関数式)
$lockkey = 2;

# ロックファイル名
$lockfile = "./lock/dayx.lock";

#============#
#  設定完了  #
#============#
# DBG ファイル
open(DBG,">dbgdayx.txt") || &error;
flock(DBG,2);

# 引数を解釈
$mode = $ENV{'QUERY_STRING'};
#英数字や_以外の文字はヌルにする。gは最後までマッチングをさせる意味。
#$mode =~ s/\s//g;
$leng = length $mode;
if ($leng > 100) {&error;}

# index.htmでのlime.plが終わるまで 1 秒待たせる
#sleep(1);

# チェックモード
if (!$mode || $mode eq 'check') { &check; }

# DB（Merged_all）OPEN
$DB = "D:/Inetpub/wwwroot/2007/Merged_all";
#dbmopen (%DB,"$DB",0666) || &error;
dbmopen (%DB,"$DB",0666) || &error();
@fn = keys %DB;
#######################
print DBG "fn = @fn\n";
#######################
@fn_s = sort @fn;
$flg = 0;
foreach $fn_s (@fn_s) {
#	chop $fn_s;
#######################
print DBG "fn_s = $fn_s\n";
#######################
	if ($fn_s = $mode) {
		$cnt = $DB{$mode};
		$flg = 1;
		goto END;
	} elsif ($fn_s > $mode) {
		$flg = 0;
	}
}
END:
# DB（Merged_all）CLOSE
dbmclose %DB;
#######################
print DBG "flg = $flg\n";
#######################
if (!$flg) {&error;}

# カウンタ画像出力
&count_view($cnt, $digit8, $gifdir1);

flock(DBG,8);
close(DBG);
exit;

#-------------------#
# カウンタ出力処理  #
#-------------------#
sub count_view {
	local(@view);
	local($data, $digit, $dir) = @_;

	# 桁数調整
	while (length($data) < $digit) { $data = '0' . $data; }

	@view=();
	foreach (split(//, $data)) {
		push(@view,"$dir/$_\.gif");
	}

	# 画像連結
	print "Content-type: image/gif\n\n";
	binmode(STDOUT);
	print &gifcat'gifcat(@view);
#	print $data;
}

#--------------#
#  HTMLヘッダ  #
#--------------#
sub header {
	print "Content-type: text/html\n\n";
	print <<"EOM";
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<title>$title</title>
<STYLE TYPE="text/css">
<!--
body,tr,td,th { font-family: "MS UI Gothic", Osaka; }
-->
</STYLE>
</head>
$body
EOM
}

#--------------#
#  エラー処理  #
#--------------#
sub error {
	local($data,@err);

	if ($lockflag) { &unlock; }

	@err = ('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) {
		$data = pack('C*',hex($_));
		print $data;
	}
	exit;
}

#------------------#
#  チェックモード  #
#------------------#
sub check {
	print "Content-type: text/html\n\n";
	print <<EOM;
<html>
<head><title>DAY COUNTER-EX</title></head>
<body>
<h2>Check Mode</h2>
<UL>
EOM

	# ログファイル確認
	foreach ($logfile, $dayfile, $monfile) {
		# パス
		if (-e $_) {
			print "<LI>$_ → パス OK!\n";

			# パーミッション
			if (-r $_ && -w $_) { print "<LI>$_ → パーミッション OK!\n"; }
			else { print "<LI>$_ → パーミッション NG!\n"; }
		} else { print "<LI>$_ → パス NG!\n"; }
	}

	# 画像ディレクトリ
	foreach ($gifdir1, $gifdir2) {
		if (-d $_) {
			print "<LI>$_ → 画像ディレクトリ OK!\n";

			# 画像
			foreach $n (0 .. 9) {
				if (-e "$_\/$n\.gif") { print "<LI>$_\/$n\.gif → OK!\n"; }
				else { print "<LI>$_\/$n\.gif → NG!\n"; }
			}
		} else { print "<LI>$_\/$n\.gif → 画像ディレクトリ NG!\n"; }
	}

	# ロックディレクトリ
	print "<LI>ロック形式：";
	if ($lockkey == 0) { print "ロック設定なし\n"; }
	else {
		if ($lockkey == 1) { print "symlink\n"; }
		else { print "mkdir\n"; }
		($lockdir) = $lockfile =~ /(.*)[\\\/].*$/;
		print "<LI>ロックディレクトリ：$lockdir\n";

		if (-d $lockdir) {
			print "<LI>ロックディレクトリ : パス OK\n";
			if (-r $lockdir && -w $lockdir && -x $lockdir) {
				print "<LI>ロックディレクトリ : パーミッション OK\n";
			} else {
				print "<LI>ロックディレクトリ : パーミッション NG → $lockdir\n";
			}
		} else { print "<LI>ロックディレクトリ : パス NG → $lockdir\n"; }
	}

	# 著作権表示：削除禁止
	print <<EOM;
<P><!-- $ver -->
- <a href="http://www.kent-web.com/">$ver</a> -
</UL>
</body>
</html>
EOM
	exit;
}

__END__

