#!/usr/local/bin/perl # ■初期設置 # --------------------------------- ここから --------------------------------- $file = './count.dat'; # カウント数保存ファイル $img = '.'; # 数字画像フォルダ $home = 'http://www.ks-power.net/'; # エラー発生時の戻りURL $lock = 0; # ファイルロック(0:off 1:flock 2:symlink) $lockfile = "kscntsp.lock"; # ロックファイル名(symlink使用時必要) $cnt_flag = 0; # 二重カウントアップ防止機能(0:off 1:on) # --------------------------------- ここまで --------------------------------- require './gifcat.pl'; # 画像連結ライブラリ $buffer = $ENV{'QUERY_STRING'}; @data = split(/&/,$buffer); foreach (@data) { ($name,$value) = split(/=/,$_); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $FM{$name} = $value; } # ■PN 未設定時の処理 if ($FM{'PN'} eq "") { &error("Option Code PN No Setting"); } # ■カウンターファイルオープン open(CNT,$file) || &error(File Not Found Error(1)); @cnt = ; close(CNT); # ■カウントアップ $cnt_up = 1; if ($cnt_flag == 1) { &get_cookie; } $flag = 0; @new = (); foreach (@cnt) { chop($_); ($cname,$count) = split(/=/,$_); if ($cname eq $FM{'PN'}) { $count=$count+$cnt_up; $flag=1; $counter = $count; } unshift(@new,"$cname=$count\n"); } if ($flag == 0) { unshift(@new,"$FM{'PN'}=1\n"); $counter = 1; } # ■ファイルロック if ($lock == 0) { &lock0; } if ($lock == 1) { &lock1; } if ($lock == 2) { &lock2; } # ■カウンター桁数設定 if ($FM{'CK'} ne "" && length($counter) < $FM{'CK'}) { $counter = "000000$counter"; $counter = substr($counter,-$FM{'CK'},$FM{'CK'}); } @ct = (); foreach (0..length($counter)-1) { $c = substr($counter,$_,1); push(@ct,"$img/$c.gif"); } if ($cnt_flag == 1) { &set_cookie; } # ■画像出力 printf("Content-type: image/gif\n"); printf("\n"); binmode(STDOUT); print &gifcat'gifcat(@ct); exit; # ■ファイルロック無し sub lock0 { open(CNT,">$file") || &error("File Not Found Error"); print CNT @new; close(CNT); } # ■ファイルロック(flock Type) sub lock1 { open(CNT,">$file") || &error("File Not Found Error"); flock(CNT,2); # File Lock print CNT @new; close(CNT); } # ■ファイルロック(symlink type) sub lock2 { foreach (1 .. 5) { if (symlink($file,$lockfile)) { last; } sleep(1); } open(CNT,">$file") || &error("File Not Found Error"); print CNT @new; close(CNT); if (-e $lockfile) { unlink($lockfile); } } ### ■Error処理 sub error { if (-e $lockfile) { unlink($lockfile); } print "Content-type: text/html\n\n"; print "\n\n"; print "\n"; print "\"$_[0]\"
\n"; print "

\n"; print "\n"; print "ホームへ戻る\n"; print "\n"; print "\n"; exit; } ### ■クッキーの取得 sub get_cookie { @COOKIE = split(/;/,$ENV{'HTTP_COOKIE'}); foreach (@COOKIE) { local($name, $value) = split(/=/,$_); $name =~ s/ //g; $DUMMY{$name} = $value; } @pairs = split(/,/,$DUMMY{'KSCNTSP'}); foreach $pair (@pairs) { local($name, $value) = split(/:/, $pair); $CK{$name} = $value; } if ($CK{'CNT'} ne "") { $cnt_up = 0; } } ### ■クッキーの発行 sub set_cookie { print "Set-Cookie: KSCNTSP= CNT\:$count;\n"; }

Make your own free website on Tripod.com