#!/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
\n"; print "- Day Counter -\n"; print "
\n\n"; exit; }