#!/usr/bin/perl ## LimeCounter v2.01 ## 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") { ✓ } # データが存在しない場合は終了 if (-e $datfile) { die "Not Exist: $datfile"; } # IPアドレス取得 $addr = $ENV{'REMOTE_ADDR'}; # ロック開始 &lock if ($lockkey); # データ読み取り open(IN,"$datafile") || die "Open Error: $datafile"; $data = ; close(IN); # カウントアップ ($count,$ip) = split(/:/, $data); if (!$ip_chk || ($ip_chk && $addr ne $ip)) { $count++; open(OUT,">$datafile") || die "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 () { ($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(""); print "
自動でダウンロードできない場合は\n"; print "ここ をクリックしてください。
\n"; print "
\n"; print "
\n\n"; } } exit; #--------------# # エラー処理 # #--------------# sub error { # ロック中の時は解除 &unlock if ($lockflag); # ダウンロードカウンタの場合 if ($type) { &header(); print "

ERROR

$_[0]\n"; print "\n"; exit; # ページカウンタの場合 } else { die "Error : $_[0]"; } } #--------------# # HTMLヘッダ # #--------------# sub header { local($meta) = @_; print "Content-type: text/html\n\n"; print < $meta $ver EOM } #------------------# # チェックモード # #------------------# sub check { &header(); print <Check Mode
    EOM # indexのパス確認 if (-e $idxfile) { print "
  • インデックスファイルのパス: OK!\n"; # パーミッション if (-r $idxfile && -w $idxfile) { print "
  • インデックスファイルのパーミッション: OK!\n"; } else { print "
  • インデックスファイルのパーミッション: NG → $idxfile\n"; } } else { print "
  • インデックスファイルのパス: NG → $idxfile\n"; } # データディレクトリ if (-d $datadir) { print "
  • データディレクトリのパス: OK!\n"; if (-r $datadir && -w $datadir && -x $datadir) { print "
  • データディレクトリのパーミッション: OK!\n"; } else { print "
  • データディレクトリのパーミッション: NG → $datadir\n"; } } else { print "
  • データディレクトリのパス: NG → $datadir\n"; } # ロックディレクトリ print "
  • ロック形式: "; if ($lockkey == 0) { print "ロック設定なし\n"; } else { if ($lockkey == 1) { print "symlink\n"; } else { print "mkdir\n"; } print "
  • ロックディレクトリ: $lockdir\n"; if (-d $lockdir) { print "
  • ロックディレクトリのパス: OK!\n"; if (-r $lockdir && -w $lockdir && -x $lockdir) { print "
  • ロックディレクトリのパーミッション: OK!\n"; } else { print "
  • ロックディレクトリのパーミッション: NG → $lockdir\n"; } } else { print "
  • ロックディレクトリのパス: NG → $lockdir\n"; } } # 著作権表示:削除禁止 print <バージョン: $ver
EOM exit; } __END__