#!/usr/local/bin/perl # ================================ # このファイルを保存してください。 # ================================ # このファイルを「check.cgi」として保存してください。文字コードはEUC、改行コードはLFです。 # ================================ # 設定してください。 # ================================ # ●設定1 最初の1行 # このファイルの最初の1行目「#!/usr/local/bin/perl」を、環境に合わせて # 変更してください。「#!/usr/local/bin/perl」か「#!/usr/bin/perl」のはずです。 # ●設定2 文法チェックをしたいCGIファイルを指定します。 # 下で、文法チェックをするファイル名を「,」区切りで記述します。 # 必要なければ空にしてください。 # 例:$syntax_file = 'test.cgi,abc.cgi'; 半角スペースなどは入れないで。 $syntax_file = 'test.cgi'; # ●設定3 jcode.plなどの必須ファイルがあればそれを指定します。 # 下で、必須ファイル名を「,」区切りで記述します。 # 必要なければ空にしてください。 # 例:$hissu_file = 'jcode.pl,mimew.pl'; 半角スペースなどは入れないで。 #$hissu_file = 'jcode.pl'; # ●設定4 CGIがファイルを作成する場合、ファイルを作成するディレクトリを指定します。 # 下で、ディレクトリパスを「,」区切りで記述します。最期に/を忘れずに。 # このCGIをおいたディレクトリを指定したい場合は「./」にします。 # 必要なければ空にしてください。 # 例:$hissu_file = './,./aaa/'; 半角スペースなどは入れないで。 #$filemakedir = './'; # 設定はここまでです。 # ================================ # 動かし方 # ================================ # ・EUC/LFで「check.cgi」という名前で保存します。 # ・「check.cgi」をチェックしたい.cgiと同じディレクトリにアップします。 # ・「check.cgi」のパーミッションを適切に変更します。 # ・ブラウザで「check.cgi」にアクセスします。 # ================================ # もろもろ # ================================ # CGIを設置するときに、telnetができなくても文法チェックをしたかったので作ったもの。 # 他にもいろいろチェックしてくれます。 # 水沢・penguin-19・和彦 # フリーウェアです。ご自由に使用・改造してください。 # ただし、保証はありませんので、オウンリスクでお使いください。 # ver.0.1 2006/8/16 # 最初のバージョン。使わなくなったルーチンも残してあって、未整理ですが。 # ================================ # メインルーチン # ================================ # ヘッダの出力 print "Content-type: text/html; charset=EUC-JP;\n\n"; print <<"_HTML_";
「syntax OK」と表示されれば文法はOKです。エラーがでた場合は、どこかに文法的な誤りがあります。
\n"; print "\n"; } # ====== 必須ファイルの有無 if($hissu_file ne ''){ print "\n
\n \n\n"; @syntax_file = split(/,/,$syntax_file); # 文法チェックファイルを分解する foreach $filename ( @syntax_file ) { $cmd = $perl_path; $cmd .= "perl -c $filename"; print "\n \n●$filenameの文法チェック $cmd:\n"; &cmd($cmd); print "$_
"; } print "
\n"; } # ====== CGIがファイルを作成可能か if($filemakedir ne ''){ print "\n
\n \n\n"; @hissu_file = split(/,/,$hissu_file); # 必須ファイル変数を分解する foreach $filename ( @hissu_file ) { &umu; } print " \n
●このcgiのフルパス:
\n"; print "\n"; # perlの場所 print "\n
\n \n\n"; print "$ENV{SCRIPT_FILENAME}"; print " \n
●perlの場所:"; print "
\n"; # perlのバージョン print "\n
\n \n\n"; $cmd = "which perl" ; &cmd($cmd); print " \n
●perlのバージョン:
"; # print "$]\n"; print "\n
\n \n\n"; $cmd = $perl_path ; $cmd .= "perl -v" ; &cmd($cmd); print " \n
●このディレクトリ内のパーミッション情報
\n\n"; print <<"_HTML_";_HTML_ print "パーミッションの変更はたいていのFTPソフトで可能なはずです。こんな感じのウインドウで設定します。
permission キャンセル OK
読む 書込 検索/実行 オーナー: □ □ □ グループ: □ □ □ 全員: □ □ □ パーミッションはファイルに与えられた読込・書込・実行の権限のことで、755、644などの数字で表します。
下の詳細表示はシェルコマンドでパーミッションを表示させています。telnetで表示されるものと同じです。ここではパーミッションは数字ではなく、各権限がダイレクトに表示されています。詳細情報の読み方は次のようになります。
最初の「-」はそれがファイルであることを示します。「d」ならディレクトリです。次に列記されているのがパーミッション(権限)。
rwxの3つで一組で、rは4点、wは2点、xは1点持っていて、それを足します。
つまり、rwxなら7、rw-なら6、r-xなら5、r--なら4です。
これが(rwxの組が)オーナー、グループ、全員の3組あります。
この順番に各組のポイントの合計を読むと755、644などとなります。これがパーミッションです。上に示したFTPソフトのパーミッション設定も、これを理解していれば設定できるはずです。
+-------------------- d はディレクトリ。-はファイル
|+------------------- r オーナーの読込権限 4┐
||+------------------ w オーナーの書込権限 2├足して7
|||+----------------- x オーナーの実行権限 1┘
||||+---------------- r グループの読込権限 4┐
|||||+--------------- w グループの書込権限 2├足して7
||||||+-------------- x グループの実行権限 1┘
|||||||+------------- r 全員の読込権限 4┐
||||||||+------------ w 全員の書込権限 2├足して7
|||||||||+----------- x 全員の実行権限 1┘
|||||||||| ↑
drwxrwxrwx 全部あると777となる
-rwxr-xr-x ←練習問題。このパーミッションは? 答えは755。
\n"; # フッタの出力 print "\n\n"; exit; # ================================ # サブルーチン # ================================ # ■■ファイルの有無を調べるルーチン・必須 sub umu{ if ( -e $filename ) { print "\n
\n \n\n\n"; print " \n================ パーミッションの詳細情報 ================"; print "
●このディレクトリ内のファイル・ディレクトリのパーミッション
\n"; $cmd = "ls -l ./"; # ./を変更すれば別のディレクトリの情報も得られる。 &cmd($cmd); # コマンド実行・結果表示 print "
●$filenameは 存在します。
\n" ; } else { print "●$filenameが ありません。
\n" ;
print " $filenameをアップロードし、パーミッションを設定してください。
●$filenameは 読み込み可能 です。
\n" ; } else { print "●$filenameは 読み込みできません。
\n" ;
print " パーミッションを666、644または444にして下さい。
●$filenameは 実行可能 です。
\n" ; } else { print "●$filenameは 実行権限がありません。
\n" ;
print " パーミッションを777または755にして下さい。
●$filenameディレクトリは 書き込み可能 です。
\n" ; } else { print "●$filenameディレクトリは 書き込みできません。
\n" ;
print " パーミッションを777または755にして下さい。パーミッションが正しいのにこのエラーがでる場合は、次の「cgiがファイルを作成できるか」を参照してください。
→cgiがファイルを作成できるかチェックしました。
\n";
print " $filemakedirディレクトリは cgiがファイルを作成可能 です。
→cgiがファイルを作成できるかチェックしました。
\n";
print " $filemakedirディレクトリは cgiがファイルを生成できません。
\n";
print " $filemakedirディレクトリのパーミッションが777、755など書込可能になっているにも関わらずこのエラーがでた場合、cgiがファイルを生成できないようにサーバの制限が設けられています。FAQなどでサーバのローカルルールを確認してください。