#!/usr/bin/perl #   ↑多くの場合このままでいいですが、 # 上のperlのパスはサーバーによって違うことがあるので、 # プロバイダーのCGI設置案内を参照して下さい。 # =================================================================== # EASYアクセスカウンター # Fail name: ezcount.cgi # Copyright; Hiroshi Ishikawa (e-mail; laut@tky.3web.ne.jp) # (URL; http://www2.tky.3web.ne.jp/~laut/) # EASYアクセスカウンターはフリーウェアです。 # 改造は自由ですが、この欄は削除しないで下さい。 # =================================================================== # アクセス数の合計の入ったデータファイル $datafile = "count.txt"; # グラフィカルカウンターの桁数 $max = 6; #この桁数にHTMLファイルのIMGタグの桁数を合わせて下さい # -------------------------------------------------------------------- # 初期設定はここまでです。 # ==================================================================== if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $formdata, $ENV{'CONTENT_LENGTH'}); } else { $formdata = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$formdata); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $FORM{$name} = $value; } $a = $FORM{'a'}; if($a == 1){ &first; &only; }else{ &only; } sub first{ # アクセス数の合計を調べて、数を1増やす open(DATA,"$datafile"); flock(DATA,2); $number = ; flock(DATA,8); close(DATA); $number++; open(DATA,">$datafile"); flock(DATA,2); print DATA $number; flock(DATA,8); close(DATA); } sub only{ open(DATA,"$datafile"); flock(DATA,2); $number = ; flock(DATA,8); close(DATA); # グラフィカルカウンタのために数を配列に代入する @totalCounter = &split_number($number); $a--; $img = "number/$totalCounter[$a].gif"; open(IMG,"$img"); @data_gif = stat($img); $byte = $data_gif[7]; print "Content-type: image/gif\n"; print "Content-length: $byte\n\n"; print ; close(IMG); } # アクセス数を、一桁の数字に分割するサブルーチン sub split_number { local($n) = @_; local(@n) = split(//,$n); while ($#n + 1 < $max) { @n = (0,@n); } @n; }