#!/usr/bin/perl #Kaede Counter CGI Version3.0A #(C)Kaede Otigiri (2000/5/5) $datafile="count/counter.dat"; #カウンターログ $bakfile="count/counterb.dat"; #カウンターログバックアップ $tempfile="count/countert.dat"; #カウンターログテンポラリ $gifdir="counter/"; #カウンターGIF画像フォルダ:"-"ならテキスト表示 $figures=6; #桁数 $htmname="toppage.html"; #HTML雛形ファイル $multiple = 0; #多重カウント禁止(0)/許可(-1) $eventfile = "event.txt"; #イベント定義ファイル(ファイルが無ければ無視されます) #-------------------------------------------------- #ここから下の部分は書き換えないで! $maxwait=180; #最大待ち時間 $idxscript = $ENV{'SCRIPT_NAME'}; @ecookie = split(/;/,$ENV{'HTTP_COOKIE'}); @countsrv = split(/-/,$ecookie[0]); #くっきぃもらいっ☆ #日にちとか取り取りっ♪ ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime ; ++$mon; $year = $year + 1900; #2000年対応っ☆(笑) $month=$year . "/" . $mon; $today=$mon . "/" . $mday; ($sec1,$min1,$hour1,$mday1,$mon1,$year1,$wday1) = localtime ; $time1=(((($mon1*31+$mday1)*24)+$hour1)*60+$min1)*60+$sec1+$maxwait; $l1=1; $tmpread = 0; if($countsrv[0] eq "htm=$idxscript") #多重カウントやだっ☆ { #くっきーからデータもらいっ☆多重かうんとあっぷいやだしっ♪ $count = $countsrv[1]; $monthcount = $countsrv[2]; $datecount = $countsrv[3]; } else { while((-f $tempfile) && ($l1>0)) #テンポラリがいたら時間が来るまでぐるぐるまわりっ☆ { sleep(1); ($sec1,$min1,$hour1,$mday1,$mon1,$year1,$wday1) = localtime ; $time2=(((($mon1*31+$mday1)*24)+$hour1)*60+$min1)*60+$sec1; if($time2>$time1) #タイムあっぷ☆ { $l1=0; open(DATA,"$tempfile"); @templines = ; close(DATA); $tmpread = -1; } } open(DATA2,">$tempfile") || die("counter: Unable to open $tempfile"); #テンポラリ作りっ♪ #データ読み読みっ☆ $err = -1 ; $count = 0; $dtn = 0; $mtn = 0; if(-f $datafile) { open(DATA,"$datafile"); @datalines = ; close(DATA); &decordcnt; } if(($err<0) && ($tmpread < 0)) { @datalines = @templines; &decordcnt; } if(($err<0) && (-f $tempfile)) { open(DATA,"$bakfile"); @datalines = ; close(DATA); &decordcnt; } #データ読み読み終わりっ☆ #今日のカウンター探しっ☆ $dateinc=-1; for($i=0;$i<$dtn;$i++) { if($dateidx[$i] eq $today){$dateinc = $i;} } if($dateinc<0) { $dateidx[$dtn]=$today; $datecnt[$dtn]=0; ++$dtn; if($dtn>29) { shift(@dateidx); shift(@datecnt); --$dtn; } $dateinc=$dtn-1; } #今月のカウンター探しっ☆ $monthinc = -1; for($i=0;$i<$mtn;$i++) { if($monthidx[$i] eq $month){$monthinc = $i;} } if($monthinc<0) { $monthidx[$mtn]=$month; $monthcnt[$mtn]=0; ++$mtn; if($mtn>12) { shift(@monthidx); shift(@monthcnt); --$mtn; } $monthinc=$mtn-1; } #カウンター足しっ☆ ++$count; ++$datecnt[$dateinc]; ++$monthcnt[$monthinc]; $outdata = $count."\nDATE\n"; for($i=0;$i<$dtn;$i++){$outdata = $outdata.$dateidx[$i]." ".$datecnt[$i]."\n";} $outdata = $outdata."MONTH\n"; for($i=0;$i<$mtn;$i++){$outdata = $outdata.$monthidx[$i]." ".$monthcnt[$i]."\n";} $outdata = $outdata."END\n"; #カウンタ書き書きっ☆(テンポラリっ) print DATA2 $outdata; close(DATA2); #カウンタ書き書きっ☆(サブログっ) open(DATA2,">$bakfile") || die("counter: Unable to open $bakfile"); print DATA2 $outdata; close(DATA2); rename($tempfile,$datafile); #メインログリネームっ☆ #書き書き終わりっ☆ $monthcount = $monthcnt[$monthinc]; $datecount = $datecnt[$dateinc]; } #くっきーもらったらここからっ☆ $htmname2 = $htmname; #デフォルト雛形HTMLファイルセットっ☆ $gifdir2 = $gifdir; #デフォルトカウンターGIF画像フォルダセットっ☆ #ここから恐怖(?)の記念XXX処理っ☆(笑) if(-f $eventfile) #記念イベントファイルがあればチェックしますねっ♪ { open(DATA,"$eventfile"); @datalines = ; srand(time || $$); $rndmdt = int(rand(10) - 0.1); foreach $line (@datalines) { @linet = split(/ /,$line); $kiflg = 0; if($linet[0] eq "COUNT") { if(($count >= $linet[2]) && ($count <= $linet[3])){$kiflg = 1;} } elsif($linet[0] eq "JUST") { if($count % $linet[2] == 0){$kiflg = 1;} } elsif($linet[0] eq "TIME") { if(($hour >= $linet[2]) && ($hour <= $linet[3])){$kiflg = 1;} } elsif($linet[0] eq "DATE") { $linet[2] =~ s\/\-\ig; @linet1 = split(/-/,$linet[2]); $kiday1 = $linet1[0] * 372 + $linet1[1] * 31 + $linet1[2]; #乱暴な計算だけどっ $linet[3] =~ s\/\-\ig; @linet1 = split(/-/,$linet[3]); $kiday2 = $linet1[0] * 372 + $linet1[1] * 31 + $linet1[2]; #31日×12カ月は372日なのっ $kidayn = $year * 372 + $mon * 31 + $mday; #でもこの方が軽くて確実よん♪ if(($kidayn >= $kiday1) && ($kidayn <= $kiday2)){$kiflg = 1;} } elsif($linet[0] eq "RANDOM") { if(($rndmdt >= $linet[2]) && ($rndmdt <= $linet[3])){$kiflg = 1;} } else{$kiflg = 0;} if($kiflg > 0) #記念XXX処理っ☆(笑) { if($linet[1] eq "HTML") { chop($linet[4]); if(-f $linet[4]){$htmname2 = $linet[4];} #記念ページに切り替えっ☆ } elsif($linet[1] eq "GIF") { chop($linet[4]); $tfl = $linet[4] . "0.gif"; if(-f $tfl){$gifdir2 = $linet[4];} #記念カウンターGIF画像フォルダセット☆ } else{$kinen = $linet[4];} #記念メッセージセット☆ } } close(DATA); } #記念XXX処理ここまでっ☆ #数字ばらばらっ♪ @counter = split(//,$count); while ($#counter + 1 < $figures) { @counter = (0,@counter); } #HTML返しっ♪ open(HTMDATA,"$htmname2") || die("counter: Unable to open $htmname2"); print "Content-type: text/html\n"; if($multiple<0) #多重カウント許可 { print "\n\n"; #くっきーあげないっ☆ } else #多重カウント禁止 { print "Set-Cookie: htm=$idxscript-$count-$monthcount-$datecount\n\n"; #くっきーあげりっ☆ } $countimg = ""; foreach $key (@counter) { if($gifdir eq "-") { $countimg = $countimg . "$key"; } else { $countimg = $countimg . "\"$key.gif\""; } } while($htmdata = ) { $htmdata =~ s//$countimg/ig; $htmdata =~ s//$monthcount/ig; $htmdata =~ s//$datecount/ig; $htmdata =~ s//$kinen/ig; print "$htmdata"; } close(HTMDATA); exit; sub decordcnt { $phase = 0; $dtn = 0; $mtn = 0; foreach $line (@datalines) { chop $line; if($line eq "DATE"){$phase = 1;} #月カウンタースタート elsif($line eq "MONTH"){$phase = 2;} #月カウンタースタート elsif($line eq "END") #データ正常終了 { $phase = 3; $err = 0 ; } elsif($phase == 0){$count = $line;} #累計 elsif($phase == 1) #日カウンター { @linet = split(/ /,$line); $dateidx[$dtn] = $linet[0]; $datecnt[$dtn] = $linet[1]; ++$dtn; } elsif($phase == 2) #月カウンター { @linet = split(/ /,$line); $monthidx[$mtn] = $linet[0]; $monthcnt[$mtn] = $linet[1]; ++$mtn; } } }#decordcnt END