#!/usr/local/bin/perl
## -------------------------------------------------------------------
## DAY COUNTER v2.4
## (c)1997-2000 KENT-WEB.COM (00/02/06)
## E-MAIL: webmaster@kent-web.com
## URL: http://www.kent-web.com/
$ver = 'DAY v2.4'; # バージョン情報(修正不要)
## -------------------------------------------------------------------
## 1. このスクリプトはフリーソフトです。このスクリプトを使用したいか
## なる損害も作者はその責を負いません。
## 2. 設置に関する質問は直接メールではお答え致しませんので、サポート
## コーナへお願いいたします。
## -------------------------------------------------------------------
## [タグの書き方の例]
## 総カウント数
## 本日のカウント数
## 昨日 〃
##
## *チェックのしかた (ブラウザから最後に ?check をつけて呼出す)
## http://..(略)../daycount.cgi?check
## -------------------------------------------------------------------
#============#
# 設定項目 #
#============#
# 画像連結ライブラリ取込み
require './gifcat.pl';
# 総カウント数の桁数
$figure1 = 5;
# 本/昨日カウント数の桁数
$figure2 = 5;
# 記録ファイル
$logfile = './daycount.dat';
# 総カウント用GIF画像のディレクトリ
# --> フルパスだと / から始るパス
$gif_path1 = './gif1';
# 本/昨日カウント用GIF画像のディレクトリ
# --> フルパスだと / から始るパス
$gif_path2 = './gif2';
# IPアドレスの二重カウントチェック
# --> 0 : チェックしない
# --> 1 : チェックする
$ip_check = 1;
# ファイルロック機構 (0=no 1=symlink 2=open)
$lockkey = 0;
# ロックファイル名
$lockfile = './daycount.lock';
# カウンタの機能タイプ
# --> 0 : 総カウント数不要(昨日/本日のみ)
# --> 1 : 標準タイプ
$type = 0;
#============#
# 設定完了 #
#============#
# 引数を解釈
$mode = $ENV{'QUERY_STRING'};
# チェックモード
if (!$mode || $mode eq 'check') { ✓ }
# 更新系処理でないならば2秒待たせる
if ($type == 1 && $mode ne "gif") { sleep(2); }
elsif ($type == 0 && $mode eq "yes") { sleep(2); }
# ロック開始
if ($type == 1 && $mode eq "gif" && $lockkey == 1) { &lock1; }
elsif ($type == 1 && $mode eq "gif" && $lockkey == 2) { &lock2; }
elsif ($type == 0 && $mode eq "today" && $lockkey == 1) { &lock1; }
elsif ($type == 0 && $mode eq "today" && $lockkey == 2) { &lock2; }
# 記録ファイルから読み込み
open(IN,"$logfile") || &error;
$data = ;
close(IN);
# 記録ファイルを分解
($key,$yes,$today,$count,$ip) = split(/<>/, $data);
# 日時を取得
$ENV{'TZ'} = "JST-9";
($sec,$min,$hour,$mday,$mon,$year) = localtime(time);
# IPチェック
$flag=0;
if ($ip_check) {
$addr = $ENV{'REMOTE_ADDR'};
if ($addr eq "$ip") { $flag=1; }
}
# 本日のカウント数をキーにしてカウントアップ
if ((!$flag && $type && $mode eq "gif") || (!$flag && !$type && $mode eq "today")) {
if ($key eq "$mday") { $today++; }
else {
$yes = $today;
$today = 1;
}
# カウントアップ処理
$count++;
# 記録ファイルを更新する
$data = "$mday<>$yes<>$today<>$count<>$addr<>";
open(OUT,">$logfile") || &error;
print OUT $data;
close(OUT);
}
# ロック解除
if (-e $lockfile && $type == 1 && $mode eq "gif") { unlink($lockfile); }
elsif (-e $lockfile && $type == 0 && $mode eq "today") { unlink($lockfile); }
# 画像表示
&count_view;
exit;
#-------------------#
# カウンタ出力処理 #
#-------------------#
## とほほさんの wwwcounterを参考にさせていただきました
sub count_view {
$count += 0;
$cntstr1 = sprintf(sprintf("%%0%dld", $figure1), $count);
$cntstr2 = sprintf(sprintf("%%0%dld", $figure2), $today);
$cntstr3 = sprintf(sprintf("%%0%dld", $figure2), $yes);
# 総カウント処理
if ($mode eq "gif") {
printf("Content-type: image/gif\n");
printf("\n");
for ($i=0; $i$lockfile") || &error;
close(LOCK);
$flag = 1;
last;
}
}
if ($flag == 0) { &error; }
}
#--------------#
# エラー処理 #
#--------------#
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 "DAY COUNTER\n";
print "\n\n";
# ログファイルのパス確認
if (-e $logfile) { print "- ログファイルのパス : OK!"; }
else { print "
- ログファイルがありません。"; }
# ログファイルのパーミッション(読みこみ)
if (-r $logfile) { print "
- ログファイルの読みこみパーミッション : OK!"; }
else { print "
- ログファイルの読みこみパーミッションが不正です。"; }
# ログファイルのパーミッション(書きこみ)
if (-w $logfile) { print "
- ログファイルの書きこみパーミッション : OK!"; }
else { print "
- ログファイルが書きこみパーミッションが不正です。"; }
# 画像ディレクトリ1のパス確認
if (-d $gif_path1) { print "
- gif1ディレクトリのパス : OK!"; }
else { print "
- gif1ディレクトリがありません。"; }
# 画像ディレクトリ2のパス確認
if (-d $gif_path2) { print "
- gif2ディレクトリのパス : OK!"; }
else { print "
- gif2ディレクトリがありません。"; }
# 画像チェック(1)
foreach (0 .. 9) {
$flag=0;
$giffile = $_ . '.gif';
unless (-e "$gif_path1\/$giffile") { $flag=1; last; }
}
if (!$flag) { print "
- gif1ディレクトリのGIF画像 : OK!"; }
else { print "
- $gif_path1\/$giffile がありません。"; }
# 画像チェック(2)
foreach (0 .. 9) {
$flag=0;
$giffile = $_ . '.gif';
unless (-e "$gif_path2\/$giffile") { $flag=1; last; }
}
if (!$flag) { print "
- gif2ディレクトリのGIF画像 : OK!"; }
else { print "
- $gif_path2\/$giffile がありません。"; }
# 著作権表示:削除禁止
print "
\n\n";
print "- Day Counter -\n";
print "\n\n";
exit;
}