#!/usr/bin/perl ## CUPID COUNTER v0.5 : ベータ版 ## Copyright(C) KENT WEB 1997-200 ## webmaster@kent-web.com ## http://www.kent-web.com/ # バージョン情報 $ver = 'Cupid v0.5'; ## ------------------------------------------------------------------- ## 1. このスクリプトはフリーソフトです。このスクリプトを使用したいか ## なる損害も作者はその責を負いません。 ## 2. 設置に関する質問は直接メールではお答え致しませんので、サポート ## コーナへお願いいたします。 ## ------------------------------------------------------------------- ## [タグの書き方の例] ## ## 総カウント数 ## ## ## 本日・昨日のカウント数 ## ## ## ## *チェックのしかた (ブラウザから最後に ?check をつけて呼出す) ## http://〜〜/cupid.cgi?check ## ------------------------------------------------------------------- #============# # 設定項目 # #============# # 画像連結ライブラリ取り込み require './gifcat.pl'; # ログファイル $logfile = "./cupid.js"; # GIF画像ディレクトリ $gifdir = "./gif"; # GIFカウンタの桁数 $digit = 7; # 二重カウント防止機能 (0=no 1=yes) # --> 直前のIPアドレスをチェックし同一のIPであればカウントしない $ip_chk = 0; # ファイルロック機構 (0=no 1=symlink 2=open) $lockkey = 0; # ロックファイル名 $lockfile = "./cupid.lock"; #============# # 設定完了 # #============# # テストモード if ($ENV{'QUERY_STRING'} eq "check") { &CheckMode; } # 時間を取得 $ENV{'TZ'} = "JST-9"; ($sec,$min,$hour,$mday) = localtime(time); # IPアドレスを取得 $addr = $ENV{'REMOTE_ADDR'}; # ロック開始 if ($lockkey == 1) { &lock1; } elsif ($lockkey == 2) { &lock2; } open(IN,"$logfile") || &error; $data = ; close(IN); ($x,$day,$x,$count,$x,$yest,$x,$to,$x) = split(/\'/, $data); ($day,$ip) = split(/:/, $day); $flag=0; if ($ip_chk && $addr eq "$ip") { $flag = 1; } if (!$ip_chk) { $addr = ""; } if (!$flag) { if ($mday == $day) { $cnt = $count + 1; $to++; $data = "D=\'$day\:$addr\'\;C=\'$cnt\'\;Y=\'$yest\'\;T=\'$to\'\;"; } else { $cnt = $count + 1; $data = "D=\'$mday\:$addr\'\;C=\'$cnt\'\;Y=\'$to\'\;T=\'1\'\;"; } # 更新 open(OUT,">$logfile") || &error; print OUT $data; close(OUT); } # ロック解除 if (-e $lockfile) { unlink($lockfile); } # 画像出力 &count_view; exit; #---------------# # GIF出力処理 # #---------------# sub count_view { while (length($count) < $digit) { $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($flag) = 0; foreach (1 .. 5) { if (-e $lockfile) { sleep(1); } else { open(LOCK,">$lockfile") || &error; close(LOCK); $flag = 1; last; } } if (!$flag) { &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 CheckMode { print "Content-type: text/html\n\n"; print "CUPID 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 "ログファイルが書きこみパーミッションが不正です。"; } # 画像ディレクトリのパス確認 if (-d $gifdir) { print "gifディレクトリのパス : OK!"; } else { print "gifディレクトリのパスが不正です。"; } # 画像チェック $flag=0; foreach (0 .. 9) { $giffile = $_ . '.gif'; unless (-e "$gifdir\/$giffile") { $flag=1; print "$gifdir\/$giffile がありません。"; } } if (!$flag) { print "gifディレクトリ内のGIF画像 : OK!"; } # 著作権表示:削除禁止 print "\n"; print "- Cupid Counter -\n"; print "\n\n\n"; exit; }
\n"; print "- Cupid Counter -\n"; print "\n