質問: htmlファイルには 食品名1 食品名2 cgiファイルには #! /usr/bin/perl require "cgi-lib.pl"; &ReadParse(); print "Content-type:text/html\n"; print "\n"; print "\n"; print "\n"; print "フォーム\n"; print "\n"; print "\n"; print "おいしい$in{'form1'}\n"; print "まずい$in{'form2'}\n"; print "\n"; print "\n"; exit; cgi-lib.plはサーバーにいれております。 どうしてうごかないのでしょうか。 perlの場所も正確です。
回答: 以下補足要求 1.エラーが出るのならステータスコードを教えてください 2. FTP転送時にasciiモード(FTPソフトによってはtextモードとも言う)で送りましたか? 3. パーミッションは取り合えず最も普遍的な 755にしてみてください 4. 2.3.を確認しても駄目なら スクリプトの末尾に BEGIN{use CGI::Carp qw(fatalsToBrowser);} と追加してみてください 表示されたメッセージがあれば 補足に貼り付けてください ##以下、上の説明 1. ステータスコードとは サーバーから返される 404、500などの数字ですが <=ここが詳しい ブラウザのタイトル欄に表示されなければ MSIEの場合なら ツール>インターネットオプション>詳細設定> 「HTTPエラーメッセージを簡易表示する 」<=これのチェックを外してからMSIEを再起動し 問題のCGIにアクセスし直してください 2. windows、MAC、UNIXの改行コード(Content-type: text/html\n\n の\n がそれです) はそれぞれ違います。 上の書き方ではwindowsは \r\n macは\rだけ unixは\nだけ asciiモードで転送しないと そのまま送られてしまいますので例えばwindowsからだと 正しいperlのパスであっても #! /usr/bin/perl\r\n となり unixは/usr/bin/perlではなく /usr/bin/perl\r を探しに言ってしまい、当然見つかりませんのでエラーに成ります。 3. サーバーによっては .cgiのパーミッションが700でも動いたり 777でも動いちゃったりします(<=これはすごく危険ですが) あるいはごく稀にグループ権限で動く場合もあるらしいです それらの場合でも最大公約数的に755なら動きます 4. これは perlのエラーメッセージを画面に表示するルーチンです デバッグが終了したら消去しても構いません。