• ベストアンサー

CGIが動作しません。

最近、Perlを初めたのですが、 CGIがうまく動作しません。 他のCGIは動作しているので CGIは動作する環境だと思います。 http://からフルパスでCGIを実行しても、 以下のエラーがでます。 -------------------------------------  500 InInternalServerError  サーバーエラーです。  以下の理由が考えられます。  パーミッション等の設定が  間違っている可能性があります。  サイト管理者にお問い合わせ下さい。 ------------------------------------- ちなみに以下のような簡単なCGIも同様です。 ===================================== #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "<html><head>\n"; print "<meta http-equiv=Content-Type content=text/html; charset=x-sjis>\n"; print "<title>StartCGI</title></head>\n"; print "<body>\n"; print "<p align=center><font size=4>初めて書いたCGI</font></p>\n"; print "</body></html>\n"; exit; =====================================  なぜなんでしょう。 困ってます。 ご教授の程、宜しくお願い致します。

  • yu-ji
  • お礼率31% (5/16)
  • CGI
  • 回答数8
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
  • annie_x
  • ベストアンサー率50% (65/129)
回答No.6

結局、動かないのはサンプルで質問に書いていただいたコードなのでしょうか? だとしたら#5さんの回答を参照してもらうとして、ローカルで動かす方法をご紹介します。 1. 参考URLから、ActivePerlをダウンロードします。 2. インストールして、コマンドラインから、「perl (ファイル名)」とやるだけです。 コードに間違いが無ければ、 Content-type: text/html <html><head> ~ のように表示されます。エラーがあれば、行番号とともに表示されますのでそちらを参考にデバッグしてみて下さい。 Windows でPerlを動作させるための詳細は以下のサイトなどをご覧下さい。 http://www.harukaze.net/~mishima/perl/win/winperl.html

参考URL:
http://www.activestate.com/Products/Download/Get.plex?id=ActivePerl

その他の回答 (7)

  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.8

動作しているCGIとテストしようとしているCGIのディレクトリは一緒ですか?実行を許可されていないディレクトリではエラーになります。

yu-ji
質問者

お礼

ありがとうございました。 無事に解決致しました。 理由はよくわからないのですが、 そのフォルダがよくなかったみたいで 新しいフォルダをそのフォルダの下に作って実行したら、うまく動作致しました。 他のCGIはそのフォルダでも動作していたのでなぜ私が作ったCGIだけがうまく動かなかったのかわかりません。 沢山の皆様にご回答を頂き感謝しております。 ありがとうございました。

  • noopee
  • ベストアンサー率38% (114/297)
回答No.7

再度。 結構思い当たりそうなフシがなさそうですね...。 私が時々やる悪あがき(笑)をお試しください。 print "Content-type: text/html\n\n"; print "<html><head>\n"; を print "Content-type: text/html\n\n"; print "<html><head>\n"; のようにコードで改行を出すだけではなく、実際の改行を入れる。 #!/usr/local/bin/perl を #!/usr/local/bin/perl -w を付けて動かしてみる。 なぜかこれで動いたことがあります。 サーバのエラーログが見られれば、もうちょっと原因がつかめるんですが...。

  • oodaiko
  • ベストアンサー率67% (126/186)
回答No.5

私が思い当たるのは改行コードと拡張子の問題くらいです。 yu-ji さんはWindowsでソースコードを書いておられることと思います。WindowsはCR+LFを改行コードとしていますがUNIX系OSではLFだけで改行コードとしています。 そこでサーバーマシンがLinuxなどUNIX系OSを使っている場合、改行コードをUNIX用に合わせてやらないとエラーになることがあります。サーバーの設定によってはWindowsの改行コードのままでも読んでくれるのかも知れませんが、私の環境ではWindowsで書いたCGIスクリプトはやはり改行コードを変換しないとエラーになります。 Windowsでの改行コード変換ソフトは知りませんが多分いくらでもあると思います。また大抵のエディターには機能として附属していると思いますので調べてみて下さい。 あとはスクリプトファイルの拡張子が.plになっていないでしょうか。これもサーバーの設定によっては拡張子が.cgiでないとCGIスクリプトとして認識してくれない場合があります。

yu-ji
質問者

お礼

ありがとうございました。 無事に解決致しました。 理由はよくわからないのですが、 そのフォルダがよくなかったみたいで 新しいフォルダをそのフォルダの下に作って実行したら、うまく動作致しました。 他のCGIはそのフォルダでも動作していたのでなぜ私が作ったCGIだけがうまく動かなかったのかわかりません。 沢山の皆様にご回答を頂き感謝しております。 ありがとうございました。

  • quenista
  • ベストアンサー率28% (122/425)
回答No.4

もう一つ思い当たる節を...。 改行コードを確認して見て下さい。 BINARYモードでアップされているのであれば、 サーバーに上げる時に、ASCIIで送ると正しく変換されると思います。

yu-ji
質問者

お礼

ありがとうございました。 無事に解決致しました。 理由はよくわからないのですが、 そのフォルダがよくなかったみたいで 新しいフォルダをそのフォルダの下に作って実行したら、うまく動作致しました。 他のCGIはそのフォルダでも動作していたのでなぜ私が作ったCGIだけがうまく動かなかったのかわかりません。 沢山の皆様にご回答を頂き感謝しております。 ありがとうございました。

yu-ji
質問者

補足

アスキーモードで転送しております。 その正常に動作するCGIも同じようにサーバにアップしておりますので間違いないと思います。

  • annie_x
  • ベストアンサー率50% (65/129)
回答No.3

質問に書かれているサンプルが動作しないのだとしたら、原因はあと2つしか思いつきません。 1. コードに使用できない文字が含まれている。 ファイル内に全角スペースなどが紛れ込んでいませんか? *ローカルで動作するのであればこれは当てはまりません。 2. サーバーに障害が発生している。 *同じサーバー上で別のCGIが動作しているのであればこれは当てはまりません。 このどちらでもないとしたら、ローカルの環境で動作するかどうかと、逆に動作しているコードを見せていただきたいところです。

yu-ji
質問者

補足

1.コードに使用できない文字ですか・・・   全角スペースの他にどんな文字があるのでしょう?   コメント、文字列としては全角はOKですよね。 2.他のCGIは正常に動作しておりますのでサーバの問題ではなさそうです。 ローカルで、動作させる方法がわからないのですが。 それと、正常に動作しているコードは結構長いので ここにのせるのはちょっと無理ですね。 著作権の問題もあるかもしれないので。

  • annie_x
  • ベストアンサー率50% (65/129)
回答No.2

とりあえず2つ。 1. パーミッションの設定が間違っている このファイルのパーミッションを、「755」などにしてみて下さい。 2. Perlへのパスが通っていない #!/usr/local/bin/perl を、他の動いているCGIと同じかどうか確認してください。 例えば、「#!/usr/bin/perl」にする必要がある場合があります。

yu-ji
質問者

お礼

ありがとうございました。 無事に解決致しました。 理由はよくわからないのですが、 そのフォルダがよくなかったみたいで 新しいフォルダをそのフォルダの下に作って実行したら、うまく動作致しました。 他のCGIはそのフォルダでも動作していたのでなぜ私が作ったCGIだけがうまく動かなかったのかわかりません。 沢山の皆様にご回答を頂き感謝しております。 ありがとうございました。

yu-ji
質問者

補足

1.パーミッションは755にしております。   ちなみに777でも試してみましたが駄目でした。 2.Perlへのパスは他のCGIと同じです。   「#!/usr/bin/perl」もすでに試しておりますが、駄目でした。

  • noopee
  • ベストアンサー率38% (114/297)
回答No.1

こんばんは。 エラーメッセージが指していることは確認されましたか? パーミッションは755になっていますか??

yu-ji
質問者

お礼

ありがとうございました。 無事に解決致しました。 理由はよくわからないのですが、 そのフォルダがよくなかったみたいで 新しいフォルダをそのフォルダの下に作って実行したら、うまく動作致しました。 他のCGIはそのフォルダでも動作していたのでなぜ私が作ったCGIだけがうまく動かなかったのかわかりません。 沢山の皆様にご回答を頂き感謝しております。 ありがとうございました。

yu-ji
質問者

補足

パーミッションは755にしております。 フォルダも同様です。 777でも試してみましたがだめでした。

関連するQ&A

  • CGI勉強中(初心者です)

    #!/usr/bin/perl print "content-type:text/html\n\n"; print "<HTML>\n"; print "<head><title>CGI</title></head>\n"; print "<BODY>\n"; print "<H1><FONT COLOR=\"#FF0000\">こんにちは</FONT></H1>\n"; print "</BODY>\n"; print "</HTML>\n"; というCGIつくりました。 プロバイダの説明には Perlの場所 /usr/bin/perl または /usr/local/bin/perl となっていますが、 どこにどう置いて(ホームディレクトリでしょうか?)、どうやって起動させてよいのかさっぱりわかりません。 ご教授ください。

    • ベストアンサー
    • CGI
  • TOK2で基礎的なCGIをUPしたが動かない。

    TOK2(http://tok2.com/)に「posttest2.cgi」をUPしました。 ファイルマネージャで確認すると、CGIのパーミッションは700、 CGIを設置するディレクトリーのパーミッションは701です。 以下 posttest2.cgiです。 -------------------START----------------------- #!/usr/bin/perl print "Content-Type:text/html\n\n"; print "<html>\n"; print "<head><title>テスト</title></head>\n"; print "<body>\n"; print "TEST"; print "</body></html>\n"; ------------------- END ----------------------- IEでこのCGIを開くと「500 Internal Server Error 」になってしまいます。。 なにが悪いのでしょう?

    • ベストアンサー
    • CGI
  • Perl CGI -入力フォーム-

    Perlを始めたばかりの初心者です。 Perlの中にフォームを入れたいのですが、エラーが出てしまいます。 現在は、ローカルで作動させています。 #! c:/perl/bin/perl print "Content-type: text/html\n\n"; print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<head><title>TEST</title></head>\n"; print "<body>\n"; print "<p><input type="text" name="name"></p>\n"; print "</body>\n"; print "</html>"; 【print "<p><input type="text" name="name"></p>\n";】この記述がエラーの対象行となっています。 inputを使用する場合は他にも記述が必要なのでしょうか? 宜しくお願いします。

  • CGIでフォームからの入力内容を表示されない。

    初歩的な質問ですみません。 自宅サーバを使っています。 ■ActivePerl 5.8.8 Build 822 ■httpd142p ------------------------------ ■httpd142p ┗■cgi-bin  ┣■cgi-lib.pl  ┣■test.cgi  ┗■test.html ------------------------------- CGIは動作します。 一行目のパスもあっています。 --------------------------- 【test.cgi】 #!C:/perl/bin/perl #require './cgi-lib.pl'; #&ReadParse(*MYDATA) print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<TITLE>RESULT</TITLE>\n"; print "<BODY>\n"; print "氏名 = $MYDATA{'simei'}\n\n"; print "住所 = $MYDATA{'jyusyo'}\n"; print "</BODY>\n"; print "</HTML>\n"; exit; -------------------------------- 【test.html】 <HTML> <HEAD> <TITLE>TEST</TITLE> </HEAD> <BODY> <P> <FORM ACTION="test.cgi" METHOD="POST"> 氏名:<INPUT TYPE="text" NAME="simei"> 住所:<INPUT TYPE="text" NAME="jyusyo"> <INPUT TYPE="submit" VALUE="送信"> <INPUT TYPE="reset" VALUE="リセット"> </P> </FORM> </BODY> </HTML> ---------------------------------- ■実行結果 氏名 = 住所 = ---------------------------------- どなたかご教授ください。

    • ベストアンサー
    • CGI
  • RubyでCGIが動きません。

    RubyでCGIを作ってApacheを使ってアプリの練習をしようとしていますが、CGIのお置き場所かApacheの設定かCGIの書き方が悪いのかIEで動かすとCGIの内容を中途半端に実行して下記のようになってしまいます。 #!/ruby/bin/ruby -Ks print "Content-type: text/html\n\n" print "" print "" print "" print "" print "こんにちは、Ruby!" print "" CGIのソースは #!/ruby/bin/ruby -Ks print "Content-type: text/html\n\n" print "<html><head>" print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">" print "<title>RubyでCGI</title></head>" print "<body>" print "こんにちは、Ruby!" print "</body></html>" 一番簡単なプログラムだと思うのですが、どこがいけないのでしょうか。ちなみにOSはVISTAです。 ちょっと気になるのはApacheMonitorServerが動かないこともあります。タイトルにはErrorと出ますが、メッセージでは「この操作を正しく終了しました」と出ます。 ちなみにApacheは動いてます。LocalHostで確認できました。 どなたかどうすれば良いのか教えて頂けないでしょうか。 よろしくお願いします。結構長い時間悩んでいます。

    • 締切済み
    • CGI
  • perlで作ったcgiがIE6で西ヨーロッパ言語でエンコードされてしまうのをさけるには?

    お世話になります。 いつもIEで西ヨーロッパ言語が選択されるのですが、 EUCと判別されるにはどのようにすればよろしいでしょうか? 当方、sakuraエディタにてcgiファイルを作成し EUCで保存しています。 コードは以下のコードです。 #!C:/Perl/bin/perl print "Content-type: text/html\n\n"; print "<html>\n"; print "<head><title>hello</title></head>\n"; print "<body>こんにちわ。ようこそcgiの世界へ</body>\n"; print "</html>\n"; _END_

    • ベストアンサー
    • CGI
  • cgiについて教えて下さい。

    cgiについて教えて下さい。 ■cgiが実行できません。 ・os:windows7(64bit) ・apache2.2.16(windows32bit)※ローカル ・ActivePerl(インストール済み) ※httpd.confファイル(現状) ・Options Index FollowSymLinks Includes ExceCGI ・AllowOverride All ・AddHandler cgi-script.cgi ・AddType text/html.shtml ・AddOutputFilter INCLUDES .shtml ■http://localhost/abc/test.cgi を実行すると表示できず。 ・http://localhost/ にはアクセスできます。 ※windowsネットワーク診断/トラブルシューティングの結果 →リモートデバイスまたはリソースが接続を受け付けません。 ■上記、test.cgiのソース #! c:/perl/bin/perl # CGIヘッダーの出力 print "Content-type: text/html\n\n"; # HTMLの出力 print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<html>\n"; print "<head><title>Hello HTML</title></head>\n"; print "<body><p>こんにちは。これはHTML文書の例です。</p></body>\n"; print "</html>"; 以上、宜しくお願い致します。

    • 締切済み
    • CGI
  • CGIの中にJAVA Script

    CGIプログラムはまったくの初心者です。 perlでCGIプログラムを組んで、HTMLを書き出すときに Java Scriptもいっしょに書き出すことはできますか? print "Content-type: text/html\n\n"; print "<html><head><title>$title</title>\n"; ---この間に入れたいのですが・・・--- print "</head>\n"; print "<body topmargin=0 leftmargin=0 marginheight=0 marginwidth=0 bgcolor=$bg_color text=$text_color link=$link_color vlink=$vlink_color background=$bg_gif>\n"; Java Scriptの menu_0.addMenuItem("ショップ案内","location='shop.html'"); 等を入れるときに 「"」や「;」はどういう風に表現すればうまくいくのでしょうか。 Java Script以外のタグの中の<font size="2">などは「"」をとれば 大丈夫なのは知っていますが、Java Scriptで「"」や「;」をとってしまうと 動作しなくなりました。

  • 「 <!--#exec cgi="***.cgi" --> 」が表示されません

    「main.cgi」というファイルを作り、単純にHTMLを表示するだけのCGIファイルを作成しました。 こんな感じ ------------main.cgi------------ #!/usr/local/bin/perl print "Content-type:text/html\n\n"; print <<EOM; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title></title> </head> <body> <略> </body> </html> EOM __END__ -------------------------------- それで、ほかのHTMLファイルに <!--#exec cgi="main.cgi" --> と入力してそのページを見てみると、 [an error occurred while processing this directive] 上の文章が表示されていました。 どうすれば「main.cgi」の内容を表示することができるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • Apacheでcgiができないんです。

    以下のホームページと同じように、設定したのですが。。。 http://www.futomi.com/lecture/apache/config.html 下のcgiは実行できます。 #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD>\n"; print "<TITLE>Apache</TITLE>\n"; print "</HEAD>\n"; print "<BODY>\n"; print "<H2>Welcome to my computer, Apache Server!</H2>\n"; print "</BODY>\n"; print "</HTML>\n"; しかし、下のcgiは実行できません。htmlファイル、cgiファイル共に、あるホームページからコピペしたので、間違いないと思います。ここではhtmlファイルは書きませんが、以下のURLです。 http://www2j.biglobe.ne.jp/~apollo/server/apacuse.html #!/usr/local/bin/perl $countfile= "count.dat"; open(IN, "< $countfile"); $count = <IN>; close(IN); $count++; open(OUT,"> $countfile"); print OUT $count; close(OUT); print "Content-type: text/plain\n\n"; print $count;

    • ベストアンサー
    • CGI

専門家に質問してみよう