%PDF- %PDF-
Direktori : /home/rappan/www/_cgi_cnt/ |
Current File : /home/rappan/www/_cgi_cnt/oneday.cgi |
#!/usr/bin/perl #=================================================================================================== # らくらく日計カウンタv1.0 (2002/11/23) # # Copyright(C) 2002 Mura's… # http://www1.harenet.ne.jp/~a-mura/ # # 本プログラムはフリーソフトとして配布していますが # 著作権は放棄していません。 # # このソフトを使用することによるいかなる損害も作者は # 一切責任を負いません。 # # ----------------------------------------------------------------------- # # ☆カウンタ設置の方法 # # カウンタ表示用CGIプログラム [ oneday.cgi ] # 設定ページ表示用CGIプログラム [ dayset.cgi ] # # タグ設定方法 # # 1.累計カウンタ(設定画面へのリンクを設定しています) # <a href="oneday/dayset.cgi" target="_blank"> # <img src="oneday/oneday.cgi?id=***&mode=total" border="0"></a> # # 2.本日のカウンタ # <img src="oneday/oneday.cgi?id=***&mode=today"> # # 3.昨日のカウンタ # <img src="oneday/oneday.cgi?id=***&mode=yday"> # # oneday.cgiへのファイルパスを指定し、オプションを設定します。 # idとmodeしていの間は半角の&で区切ってください。 # (id=***&mode=total) # # ***の部分に半角英数8文字までのIDを必ず指定してください。 # 1つのIDで「トータル・本日・昨日」の3個のカウンタが1セットになります。 # mode= の部分でカウンタの種類を指定します。 # mode=total トータルカウント # mode=today 本日のカウント # mode=yday 昨日のカウント # # # 1.上記のカウンタ表示用タグコードを表示したいページ場所に書き込みます。 # # 2.このファイルoneday.cgiとdayset.cgiの1行目のPerlへのパスを確認し、必要であれば修正します。 # # 3.ファイルをサーバーに転送します。 # # 4.パーミッションの設定をします。 # # ☆パーミッション設定 # public_html / index.html(ホームページディレクトリ) # # / oneday(755) - oneday.cgi(755) # - dayset.cgi(755) # - param.cgi(644) # - gifcat.pl(644) # # / dat(755) - index.html # # / gif / image1 - 0.gif, 1.gif, … # / image2 - 0.gif, 1.gif, … # / image3 - 0.gif, 1.gif, … # / : 4 - : # / : 5 - : # # # 上記のように設定してページ上でトータルカウンタをクリックすると設定画面が開きます。 # IDとパスワードを入力して「送信」ボタンを押すとカウンタのIDごとに各種設定ができます。 # # ☆設定画面で選択できる画像を追加するには # gif フォルダ以下に番号数を増やしたimageフォルダを追加する # # ※例えばimage23フォルダまですでに存在する時、image24フォルダ # を作成してそこに画像を格納 # #=================================================================================================== #-- ライブラリ&設定ファイル読み込み require './gifcat.pl'; require './param.cgi'; #-- パラメータ読み込み&デコード ¶Decode; #-- 例外 if($IN{'id'} eq '' || $IN{'mode'} eq ''){exit;} #-- ファイルロック if($IN{'mode'} eq 'total' || $IN{'mode'} eq 'today'){ &lock; } #-- 設定ファイル読み込み if(&readSetup($IN{'id'}) eq 'NG'){ if($IN{'mode'} eq 'total' || $IN{'mode'} eq 'today'){&unlock;} exit; } #-- 過去ファイル削除 for($i=0; $i<$delete; $i++){ my($expath) = getPath('true', $i+2, $IN{'id'}); unlink($expath); $expath = getPath('false', $i+2, $IN{'id'}); unlink($expath); } #-- IPチェック&カウント取得表示 if($IN{'mode'} eq 'total'){ if($termflg != 0){ # IPチェックON if(&ipCheck(getPath('true', 0, $IN{'id'})) eq 'true'){ $nowcount = &countUp("$basepath$IN{'id'}cnt\.cgi", 'true'); &countUp(getPath('false', 0, $IN{'id'}), 'true'); }else{ $nowcount = &countUp("$basepath$IN{'id'}cnt\.cgi", 'false'); } }else{ # IPチェックOFF $nowcount = &countUp("$basepath$IN{'id'}cnt\.cgi", 'true'); } if($nowcount eq ''){&unlock; exit;} #-- カウント整形 $digit = sprintf("%0${totalfigure}d", $nowcount); #-- ロック解除 &unlock; #-- 出力 &showImage($digit, $totalfigure, $totalimg); }elsif($IN{'mode'} eq 'today'){ if($termflg != 0){ # IPチェックON if(&ipCheck(getPath('true', 0, $IN{'id'})) eq 'true'){ $nowcount = &countUp(getPath('false', 0, $IN{'id'}), 'true'); &countUp("$basepath$IN{'id'}cnt\.cgi", 'true'); }else{ $nowcount = &countUp(getPath('false', 0, $IN{'id'}), 'false'); } }else{ # IPチェックOFF $nowcount = &countUp(getPath('false', 0, $IN{'id'}), 'true'); } if($nowcount eq ''){&unlock; exit;} #-- カウント整形 $digit = sprintf("%0${todayfigure}d", $nowcount); #-- ロック解除 &unlock; #-- 出力 &showImage($digit, $todayfigure, $todayimg); }else{ $nowcount = &countUp(getPath('false', 1, $IN{'id'}), 'false'); if($nowcount eq ''){exit;} #-- カウント整形 $digit = sprintf("%0${ydayfigure}d", $nowcount); #-- 出力 &showImage($digit, $ydayfigure, $ydayimg); } #======================# # パラメータ読み込み #======================# sub paraDecode { my($pair,$name,$value); foreach $pair(split(/&/, $ENV{'QUERY_STRING'})){ ($name, $value) = split(/=/, $pair); #-- 文字のデコード $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg; $IN{$name} = $value; } } #===================# # GIF出力 #===================# sub showImage { my(@num) = (); my($chip); for(my($i)=0; $i<$_[1]; $i++){ $chip = substr($_[0], $i, 1); push(@num, "$_[2]$chip\.gif"); } print "Content-type: image/gif\n\n"; binmode(STDOUT); print &gifcat'gifcat(@num); exit; } #===========================# # IPアドレスチェック&更新 #===========================# sub ipCheck { my($time) = time; if((-e $_[0])){ open(FILE, "+< $_[0]") or return 'false'; my(@data) = <FILE>; my($res) = 'true'; my($exflg) = 0; my(@para); seek(FILE, 0, 0); truncate(FILE, 0); foreach(@data){ $_ =~ s/\r//; $_ =~ s/\n//; @para = split(/\,/, $_); $para[1] =~ s/\D//g; if($ENV{'REMOTE_ADDR'} eq $para[0]){ $exflg = 1; if(($termtime*60) < ($time-$para[1])){ print FILE "$para[0],$time\n"; }else{ $para[1] += 7; print FILE "$para[0],$para[1]\n"; $res = 'false'; } next; } if(($termtime*60) < ($time-$para[1])){next;} print FILE "$_\n"; } if($exflg == 0){print FILE "$ENV{'REMOTE_ADDR'},$time\n";} close(FILE); return $res; }else{ open(FILE, "> $_[0]") or return 'false'; print FILE "$ENV{'REMOTE_ADDR'},$time\n"; close(FILE); chmod(0666, $_[0]); return 'true'; } }