2009-08-02 23 views
1

私は本当にPerlファイルを実行する方法を取得していません。 .plをcgi-binにアップロードしてからchmodを755にアップロードしました。ファイルを実行すると、500台の内部サーバエラーが発生します。なぜ私のPerl CGIスクリプトは機能しませんか?

**/cgi-bin/helloworld.pl** 


#!/usr/bin/perl 

print 'hello world'; 

私が間違っていることについてのアイデアはありますか?

+0

ウェブサーバーのエラーログには啓発的な情報がありますか? – draegtun

+0

どのウェブサーバ、どのオペレーティングシステムですか? –

+0

cpanelのエラーログに何も表示されません。私はUNIXのLinuxです。 – pjanaway

答えて

10

あなたはおそらくあなたのprint文の前に

print "Content-type: text/html\n\n"; 

ようなものが必要。 http://httpd.apache.org/docs/2.0/howto/cgi.html#troubleshoot

これは、使用しているサーバーと、サーバーのログに表示されている正確なエラーメッセージを知るのに役立ちます。私はあなたがApacheを使用しているなら、「スクリプトヘッダーの早すぎる終わり」のようなものを見るでしょう。

+0

ちょうどその行が追加されていて、それは役に立たない。 – pjanaway

+1

そのような印刷物を使用すると、悪い書式とみなされます。 CGIモジュールを調べてください。 – radicalmatt

2

まず、そのシステム上のperlへのパスを見つけ、シバンラインが正しいことを確認します。システムとWebサーバーに関する詳細情報を提供することは、他人の診断にも役立ちます。その後

、試してみてください。

#!/path/to/perl/binary 

use strict; 
use warnings; 

$| = 1; 

use CGI qw(:default); 

print header('text/plain'), "Hello World\n"; 
+0

いいえ動作しませんでした。パスは確かに/ usr/bin/perlです。osはLinux、そのApacheです。 – pjanaway

+0

@Paulあなたは単に人を繋ぎ合わせていますか?Apacheからエラーログにエントリなしで500のステータスを取得しません。エラーログに情報を掲載します。常に情報なしで推測しようとすることには意味がありません。 –

+0

私はcpanel >>エラーログを見て、その中に何も言わなかったのです – pjanaway

3

がブラウザに出力致命的なエラーにCGI::Carpを使用して調べてください。 use CGI::Carp qw(fatalsToBrowser);

また、CGI moduleを使用して、headers/html/whateverなどの必要な情報を出力してください。それをすべて印刷するのは間違った方法です。

編集:あなたは間違いなく何らかのエラーログをチェックすることもできます。

+0

出力にCGIモジュールを使用しないでください。そうです、1990年です。代わりにテンプレートを使用してください。 :) –

+0

テンプレートが必要な場合は、フレームワークを使用する必要があります。 – radicalmatt

1

スクリプトをシェルプロンプトから実行できることを確認してください(Perlから呼び出さずに)。つまり、あなたのcgi-binディレクトリに移動して、次のように入力することができます。

./helloworld.pl 

出力を得ることができます。それでも問題が解決しない場合は、修正してください。出力を見ると、最初の行がなければなりません:(。または、text/plainまたは他のいくつかの有効なMIMEタイプ)

Content-Type: text/html 

付属していない場合、これを修正。

ページの本文が印刷される前に空白行が必要です。空行がなければ、スクリプトはCGIスクリプトとして機能しません。したがって、合計出力は次のようになります。

Content-Type: text/html 

hello world 

スクリプトを実行でき、それが出力されていれば、何か変わったことが起こります。Apacheがerror_logファイルにエラーを記録していない場合は、多少の問題があります。

0

あなたはApacheがサーバにCGIスクリプトとして.plファイルを有効にしましたか?あなたのApache設定ファイルを確認するか、または(速いが保証されていないテストで)ファイル拡張子を.cgiに変更してみてください。また、シバンライン(#!)が一番上にあることを確認してください。最後に、サーバーがLinuxの場合は、行末がUnixであることを確認してください。そして、はい、コマンドラインからテストし、use strict;という潜在的なエラーのフィードバックを改善してください。

関連する問題