#!/usr/local/bin/perl5.8 -w #┌───────────────────────────────── #│ CUPID COUNTER v1.3 (2007/07/19) #│ Copyright (c) KentWeb #│ webmaster@kent-web.com #│ http://www.kent-web.com/ #└───────────────────────────────── $ver = 'CupidCounter v1.3'; #┌───────────────────────────────── #│ [注意事項] #│ 1. このスクリプトはフリーソフトです。このスクリプトを使用した #│ いかなる損害に対して作者は一切の責任を負いません。 #│ 2. 設置に関する質問はサポート掲示板にお願いいたします。 #│ 直接メールによる質問は一切お受けいたしておりません。 #└───────────────────────────────── # # [ ディレクトリ構成例 ] # # public_html / index.html (ホームディレクトリ) # | # +-- cupid / cupid.cgi [705] # | cupid.js [606] # | gifcat.pl [604] # | # +-- gif / 0.gif, 1.gif, ..... 9.gif # | # +-- lock [707] / # # [ タグの書き方の例 ] # # 総カウント数 # # # 本日・昨日のカウント数 # # # # *チェックのしかた (ブラウザから最後に ?check をつけて呼出す) # http://〜〜/cupid.cgi?check #------------------------------------------------- # 設定項目 #------------------------------------------------- # 画像連結ライブラリ取り込み require './gifcat.pl'; # ログファイル $logfile = './cupid.js'; # GIF画像ディレクトリ # → 最後は / で閉じる $gifdir = './gif/'; # GIFカウンタの桁数 $digit = 6; # 二重カウント防止機能 (0=no 1=yes) # → 直前のIPアドレスをチェックし同一のIPであればカウントしない $ip_chk = 0; #------------------------------------------------- # 設定完了 #------------------------------------------------- # テストモード if ($ENV{'QUERY_STRING'} eq "check") { &CheckMode; } # 日を取得 $ENV{'TZ'} = "JST-9"; $mday = (localtime(time))[3]; # IPアドレスを取得 $addr = $ENV{'REMOTE_ADDR'}; # データ読み取り open(DAT,"+< $logfile") || &error; eval "flock(DAT, 2);"; $data = ; # データ分解 if ($data =~ /D\='(\d{0,2}):?([^\']*)';C\='(\d*)';Y\='(\d*)';T\='(\d*)';/) { $day = $1; $ip = $2; $all = $3; $yes = $4; $tod = $5; } else { close(DAT); &error; } # カウントアップ unless ($ip_chk && $addr eq $ip) { # 累計アップ $all++; # 日は同じ if ($mday == $day) { $tod++; $data = "D='$day:$addr';C='$all';Y='$yes';T='$tod';"; # 日が違う場合 } else { $data = "D='$mday:$addr';C='$all';Y='$tod';T='0';"; } # 更新 seek(DAT, 0, 0); print DAT $data; truncate(DAT, tell(DAT)); } close(DAT); # 画像出力 while (length($all) < $digit) { $all = '0' . $all; } @image = (); foreach ( split(//, $all) ) { push(@image,"$gifdir$_\.gif"); } print "Content-type: image/gif\n\n"; binmode(STDOUT); print &gifcat'gifcat(@image); exit; #------------------------------------------------- # エラー処理 #------------------------------------------------- sub error { local($data,@err); # エラー画像 @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

Check Mode