#!/usr/local/bin/perl #┌───────────────────────────────── #│ CUPID COUNTER v1.1 (2001/10/07) #│ Copyright(C) KENT WEB 1997-2001 #│ webmaster@kent-web.com #│ http://www.kent-web.com/ #└───────────────────────────────── $ver = 'CupidCounter v1.1'; #┌───────────────────────────────── #│ [注意事項] #│ 1. このスクリプトはフリーソフトです。このスクリプトを使用した #│ いかなる損害に対して作者は一切の責任を負いません。 #│ 2. 設置に関する質問はサポート掲示板にお願いいたします。 #│ 直接メールによる質問は一切お受けいたしておりません。 #└───────────────────────────────── # # [ ディレクトリ構成例 ] # # ***.co.jp / index.html ... (ここにカウンタを設置) # | # +----- cgi-bin # | # +-- cupid / cupid.cgi # | cupid.js # | gifcat.pl # +--- gif1 / 0.gif # | 1.gif # | : # | 9.gif # # [タグの書き方の例](***.co.jp の部分は自分のドメインに置き換えてください) # # 総カウント数 # # # 本日・昨日のカウント数 # # # # *チェックのしかた (ブラウザから最後に ?check をつけて呼出す) # http://www.***.co.jp/cgi-bin/cupid/cupid.cgi?check #============# # 設定項目 # #============# #【重要】●の箇所のパスを変更してください。(例、***.co.jpの場合) # ***.com であれば、***_com となります。 # ●画像連結ライブラリ取り込み require 'D:\\users\\itmstr_com\\usa\\cgi-bin\\cupid\\gifcat.pl'; # ●ログファイル $logfile = 'D:\\users\\itmstr_com\\usa\\cgi-bin\\cupid\\cupid.js'; # ●GIF画像ディレクトリ # → 最後は \\ で閉じる $gifdir = 'D:\\users\\itmstr_com\\usa\\cgi-bin\\cupid\\gif\\'; # GIFカウンタの桁数 $digit = 6; # 二重カウント防止機能 (0=no 1=yes) # → 直前のIPアドレスをチェックし同一のIPであればカウントしない $ip_chk = 0; # ファイルロック機構 # 0 : しない # 1 : する(symlink関数) # 2 : する(mkdir関数)→ サーバで symlink関数が使用不可の場合 $lockkey = 2; # ●ロックファイル名 $lockfile = 'D:\\users\\itmstr_com\\usa\\cgi-bin\\cupid\\cupid.lock'; #============# # 設定完了 # #============# #----------------------- これより処理開始 -----------------------# #この行以下を書き換えられた場合、サポートの対象外となりますのでご注意下さい# # テストモード if ($ENV{'QUERY_STRING'} eq "check") { &CheckMode; } # 日を取得 $ENV{'TZ'} = "JST-9"; $mday = (localtime(time))[3]; # IPアドレスを取得 $addr = $ENV{'REMOTE_ADDR'}; # ロック開始 &lock if ($lockkey); 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); } # ロック解除 &unlock if ($lockkey); # 画像出力 while (length($count) < $digit) { $count = '0' . $count; } @array = split(//, $count); @image=(); foreach (@array) { push(@image,"$gifdir$_\.gif"); } print "Content-type: image/gif\n\n"; binmode(STDOUT); print &gifcat'gifcat(@image); exit; #--------------# # ロック処理 # #--------------# sub lock { local($retry)=5; if (-e $lockfile) { local($mtime) = (stat($lockfile))[9]; if ($mtime && $mtime < time - 180) { &unlock; } } # symlink関数式ロック if ($lockkey == 1) { while (!symlink(".", $lockfile)) { if (--$retry <= 0) { &error; } sleep(1); } # mkdir関数式ロック } elsif ($lockkey == 2) { while (!mkdir($lockfile, 0755)) { if (--$retry <= 0) { &error; } sleep(1); } } $lockflag=1; } #--------------# # ロック解除 # #--------------# sub unlock { if ($lockkey == 1) { unlink($lockfile); } elsif ($lockkey == 2) { rmdir($lockfile); } $lockflag=0; } #--------------# # エラー処理 # #--------------# sub error { &unlock if ($lockflag); @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 CheckMode { print "Content-type: text/html\n\n"; print "$ver\n"; print "\n

Check Mode

\n
Copyright (C) Kent Web
\n"; print "$ver
\n\n\n"; exit; }