私は本当にPerlファイルを実行する方法を取得していません。 .plをcgi-binにアップロードしてからchmodを755にアップロードしました。ファイルを実行すると、500台の内部サーバエラーが発生します。なぜ私のPerl CGIスクリプトは機能しませんか?
**/cgi-bin/helloworld.pl**
#!/usr/bin/perl
print 'hello world';
私が間違っていることについてのアイデアはありますか?
私は本当にPerlファイルを実行する方法を取得していません。 .plをcgi-binにアップロードしてからchmodを755にアップロードしました。ファイルを実行すると、500台の内部サーバエラーが発生します。なぜ私のPerl CGIスクリプトは機能しませんか?
**/cgi-bin/helloworld.pl**
#!/usr/bin/perl
print 'hello world';
私が間違っていることについてのアイデアはありますか?
公式Perl CGI FAQを読む。
これは、あなたが持っているかもしれない多くの他の質問に答えます。例えば
:"My CGI script runs from the command line but not the browser. (500 Server Error)"
は、この情報がお役に立てば幸い!
あなたはおそらくあなたのprint文の前に
print "Content-type: text/html\n\n";
ようなものが必要。 http://httpd.apache.org/docs/2.0/howto/cgi.html#troubleshoot
これは、使用しているサーバーと、サーバーのログに表示されている正確なエラーメッセージを知るのに役立ちます。私はあなたがApacheを使用しているなら、「スクリプトヘッダーの早すぎる終わり」のようなものを見るでしょう。
ちょうどその行が追加されていて、それは役に立たない。 – pjanaway
そのような印刷物を使用すると、悪い書式とみなされます。 CGIモジュールを調べてください。 – radicalmatt
まず、そのシステム上のperl
へのパスを見つけ、シバンラインが正しいことを確認します。システムとWebサーバーに関する詳細情報を提供することは、他人の診断にも役立ちます。その後
、試してみてください。
#!/path/to/perl/binary
use strict;
use warnings;
$| = 1;
use CGI qw(:default);
print header('text/plain'), "Hello World\n";
がブラウザに出力致命的なエラーにCGI::Carpを使用して調べてください。 use CGI::Carp qw(fatalsToBrowser);
また、CGI moduleを使用して、headers/html/whateverなどの必要な情報を出力してください。それをすべて印刷するのは間違った方法です。
編集:あなたは間違いなく何らかのエラーログをチェックすることもできます。
出力にCGIモジュールを使用しないでください。そうです、1990年です。代わりにテンプレートを使用してください。 :) –
テンプレートが必要な場合は、フレームワークを使用する必要があります。 – radicalmatt
スクリプトをシェルプロンプトから実行できることを確認してください(Perlから呼び出さずに)。つまり、あなたのcgi-binディレクトリに移動して、次のように入力することができます。
./helloworld.pl
出力を得ることができます。それでも問題が解決しない場合は、修正してください。出力を見ると、最初の行がなければなりません:(。または、text/plain
または他のいくつかの有効なMIMEタイプ)
Content-Type: text/html
付属していない場合、これを修正。
ページの本文が印刷される前に空白行が必要です。空行がなければ、スクリプトはCGIスクリプトとして機能しません。したがって、合計出力は次のようになります。
Content-Type: text/html
hello world
スクリプトを実行でき、それが出力されていれば、何か変わったことが起こります。Apacheがerror_log
ファイルにエラーを記録していない場合は、多少の問題があります。
はおそらく、あなたが必要とする私のTroubleshooting Perl CGI scripts
あなたはApacheがサーバにCGIスクリプトとして.pl
ファイルを有効にしましたか?あなたのApache設定ファイルを確認するか、または(速いが保証されていないテストで)ファイル拡張子を.cgi
に変更してみてください。また、シバンライン(#!
)が一番上にあることを確認してください。最後に、サーバーがLinuxの場合は、行末がUnixであることを確認してください。そして、はい、コマンドラインからテストし、use strict;
という潜在的なエラーのフィードバックを改善してください。
ウェブサーバーのエラーログには啓発的な情報がありますか? – draegtun
どのウェブサーバ、どのオペレーティングシステムですか? –
cpanelのエラーログに何も表示されません。私はUNIXのLinuxです。 – pjanaway