#!/usr/local/bin/perl ## LimeCounter v2.1 ## Copyright (c) KentWeb # 外部ファイル取り込み require './init.cgi'; # 外部データ受け取り $buf = $ENV{'QUERY_STRING'}; $buf =~ s/\W//g; # ファイル定義 $datafile = "$datadir/$buf.dat"; $lockfile = "$lockdir/$buf.lock"; # チェックモード if (!$buf || $buf eq "check") { ✓ } # データが存在しない場合は終了 unless (-e $datafile) { &error("Not Exist: $datafile"); } # IPアドレス取得 $addr = $ENV{'REMOTE_ADDR'}; # ロック開始 &lock if ($lockkey); # データ読み取り open(IN,"$datafile") || &error("Open Error: $datafile"); $data = <IN>; close(IN); # カウントアップ ($count,$ip) = split(/:/, $data); if (!$ip_chk || ($ip_chk && $addr ne $ip)) { $count++; open(OUT,">$datafile") || &error("Write Error: $datafile"); print OUT "$count:$addr"; close(OUT); } # ロック解除 &unlock if ($lockkey); # ページカウンタ if ($type == 1) { # ダミーGIF画像 local(@gif) = ( "47","49","46","38","39","61","02","00","02","00","80","00", "00","00","00","00","ff","ff","ff","21","f9","04","01","00", "00","01","00","2c","00","00","00","00","02","00","02","00", "00","02","02","8c","53","00","3b"); # ダミー画像を表示 print "Content-type: image/gif\n\n"; foreach (@gif) { print pack('C*',hex($_)); } # ダウンロードカウンタ } else { # index読み取り $f=0; open(IN,"$idxfile"); while (<IN>) { ($id,$sub,$link,$file) = split(/<>/); if ($buf eq $id) { $f++; last; } } close(IN); if (!$f) { &error("IDが不正です"); } # Locationヘッダ if ($type == 2) { # IISサーバ (PerlIS) 対応 if ($ENV{'PERLXS'} eq "PerlIS") { print "HTTP/1.0 302 Temporary Redirection\r\n"; print "Content-type: text/html\n"; } # ファイルへジャンプ print "Location: $file\n\n"; # metaタグ } else { &header("<META HTTP-EQUIV=\"refresh\" CONTENT=\"1; URL=$file\">"); print "<div align=center>自動でダウンロードできない場合は\n"; print "<a href=\"$file\">ここ</a> をクリックしてください。<br>\n"; print "<form><input type=button value='閉じる' onClick='top.close();'>\n"; print "</form></div>\n</body></html>\n"; } } exit; #--------------# # エラー処理 # #--------------# sub error { # ロック中の時は解除 &unlock if ($lockflag); # ダウンロードカウンタの場合 if ($type) { &header(); print "<h3>ERROR</h3>$_[0]\n"; print "</body></html>\n"; exit; # ページカウンタの場合 } else { die "Error : $_[0]"; } } #--------------# # HTMLヘッダ # #--------------# sub header { local($meta) = @_; print "Content-type: text/html\n\n"; print <<EOM; <html> <head> <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS"> $meta <title>$ver</title></head> <body> EOM } #------------------# # チェックモード # #------------------# sub check { &header(); print <<EOM; <h3>Check Mode</h3> <ul> EOM # indexのパス確認 if (-e $idxfile) { print "<li>インデックスファイルのパス: OK!\n"; # パーミッション if (-r $idxfile && -w $idxfile) { print "<li>インデックスファイルのパーミッション: OK!\n"; } else { print "<li>インデックスファイルのパーミッション: NG → $idxfile\n"; } } else { print "<li>インデックスファイルのパス: NG → $idxfile\n"; } # データディレクトリ if (-d $datadir) { print "<li>データディレクトリのパス: OK!\n"; if (-r $datadir && -w $datadir && -x $datadir) { print "<li>データディレクトリのパーミッション: OK!\n"; } else { print "<li>データディレクトリのパーミッション: NG → $datadir\n"; } } else { print "<li>データディレクトリのパス: NG → $datadir\n"; } # ロックディレクトリ print "<li>ロック形式: "; if ($lockkey == 0) { print "ロック設定なし\n"; } else { if ($lockkey == 1) { print "symlink\n"; } else { print "mkdir\n"; } print "<li>ロックディレクトリ: $lockdir\n"; if (-d $lockdir) { print "<li>ロックディレクトリのパス: OK!\n"; if (-r $lockdir && -w $lockdir && -x $lockdir) { print "<li>ロックディレクトリのパーミッション: OK!\n"; } else { print "<li>ロックディレクトリのパーミッション: NG → $lockdir\n"; } } else { print "<li>ロックディレクトリのパス: NG → $lockdir\n"; } } # 著作権表示:削除禁止 print <<EOM; <li>バージョン: <a href="http://www.kent-web.com/">$ver</a> </ul> </body> </html> EOM exit; } __END__