Windows上のApacheでPerlスクリプトにアクセスしようとすると、次のエラーが表示されます。
Server error!
The server encountered an internal error and was unable to complete your request.
Error message:
End of script output before headers: sample.pl
If you think this is a server error, please contact the webmaster.
Error 500
localhost
Apache/2.4.4 (Win32) OpenSSL/1.0.1e PHP/5.5.3
これは私のサンプルスクリプトです
#!"C:\xampp\Perl\bin\Perl.exe"
print "Hello World";
しかし、ブラウザでは動作しません
ファイルの許可を確認してください。
間違った権限が設定されたLinuxマシンでもまったく同じエラーが発生しました。
chmod 755 myfile.pl
問題を解決しました。
これがWeb用のCGIスクリプトである場合、ヘッダーを出力する必要があります。
#!"C:\xampp\Perl\bin\Perl.exe"
print "Content-Type: text/html\n\n";
print "Hello World";
次のエラーメッセージは、このEnd of script output before headers: sample.pl
または、さらに良いことに、ヘッダーを出力するには [〜#〜] cgi [〜#〜] モジュールを使用します。
#!"C:\xampp\Perl\bin\Perl.exe"
use strict;
use warnings;
use CGI;
print CGI::header();
print "Hello World";
将来の参考のために:
これは通常、ファイルを表示または実行できないときに発生するエラーであり、その理由は一般にアクセス許可エラーです。 @Renningの提案に従い、chmod 755 test.cgi
を実行することから始めます(明らかにtest.cgiをここのcgiスクリプトの名前に置き換えます)。
それでもうまくいかない場合は、他にも試してみることができます。別のユーザーの家でtest.cgi
をルートとして作成したときに、このエラーが発生しました。そこで修正されたのは、chmod user:user test.cgi
を実行することでした。ここで、userは現在いる自宅のユーザーの名前です。
最後に考えることができるのは、cgiスクリプトが適切なヘッダーを返すようにすることです。私のRubyスクリプトでは、ページに実際に出力する前にputs "Content-type: text/html"
を置くことでそれを行いました。
ハッピーコーディング!
おそらくこれはSELinuxブロックです。これを試して:
# setsebool -P httpd_enable_cgi 1
# chcon -R -t httpd_sys_script_exec_t cgi-bin/your_script.cgi
Raspberry-piで同じエラーが発生しました。シバンに-w
を追加して修正しました
#!/usr/bin/Perl -w
Suexecを使用している場合は、suexecで指定したユーザーと同じユーザーがスクリプトとそのディレクトリを所有していることを確認してください。
さらに、cgiスクリプトを実行しているユーザーに、ファイルおよびShebangで指定されたプログラムに対する実行権限が与えられていることを確認してください。
たとえば、私のcgiスクリプトが
#! /usr/bin/cgirunner
次に、ユーザーは/ usr/bin/cgirunnerを実行する許可を必要とします。
XAMPP cgiで始めるすべての人にとって
拡張子をplからcgiに変更します
パーミッションを755に変更します
mv test.pl test.cgi
chmod 755 test.cgi
私も修正しました。
内部エラーは、シバン行の終わりに隠された文字が原因です!!すなわち、行#!/ usr/bin/Perl
末尾に-
または-w
を追加すると、文字が「Perl」から離れ、Perlプロセッサへのパスを見つけて実行するスクリプトを許可します。
HIDDEN文字は、スクリプトの作成に使用されたエディターによって作成されます
Apacheのmod_userdir
を使用してホームディレクトリからCGIファイルを実行しており、ユーザーのpublic_html
ディレクトリがそのユーザーのプライマリGIDによってグループ所有されていない場合、このエラーが発生する可能性があります。
私はこれに関するドキュメントを見つけることができませんでしたが、これはいくつかの失敗したCGIスクリプトにつまずいた解決策でした。私はそれが本当に奇妙に聞こえることを知っています(私にとっても意味がありません)が、それは私のために働いたので、うまくいけばこれは他の誰かにも役立つでしょう。
上記のすべての提案に基づいて、cgiスクリプトの実行にxamppを使用していました。 Windows 8では変更は一切ありませんでしたが、Cent7.0では上記のようなエラーがスローされていました
AH01215:(2)そのようなファイルまたはディレクトリはありません: '/opt/lampp/cgi-bin/pbsa_config.cgi'のexecが失敗しました:/opt/lampp/cgi-bin/pbsa_config.cgi、リファラー:http:// <> /MCB_HTML/TestBed.html
[2017年8月30日水曜日09:11:03.796584 2017] [cgi:error] [pid 32051] [client XX:60624]ヘッダーの前のスクリプト出力の終わり:pbsa_config.cgi、リファラー: http:// xx/MCB_HTML /TestBed.html
試してください:
無効化されたselinux
スクリプトに対する完全なアクセス許可が与えられますが、755は問題ありません
最後に-wのように追加しました
#!/usr/bin/Perl -w*
use CGI ':standard';
{
print header(),
...
end_html();
}
**-w** indictes enable all warnings.It started working, No idea why -w here.