0

私は奇妙な問題を抱えています。、

コマンドラインからはcgibashスクリプトとcgiperlスクリプトが機能していますが、ブラウザからはcgi bashスクリプトのみが機能しており、cgiperlは機能していません

ブラウザからcgiperlスクリプトにアクセスした後、500内部サーバーエラーが発生します。

and apache error log says

[Thu Oct 25 01:58:59 2012] [error] [client x.x.x.x] (13)Permission denied: exec of '/home/x/x/x/x/public_html/cgi-bin/test.cgi' failed
[Thu Oct 25 01:58:59 2012] [error] [client x.x.x.x] Premature end of script headers: test.cgi

ブラウザからcgiperlスクリプトを実行したい。

どうすればいいのですか。

[root@www ~]# which perl
/usr/bin/perl

[root@www cgi-bin]# perl test.cgi
Content-type: text/plain

testing...

test.cgiのソース

#!/usr/bin/perl

print "Content-type: text/plain\n\n";
print "testing...\n";

御時間ありがとうございます。

そのapache2を備えた専用サーバー。

4

3 に答える 3

2

Barmar が述べたように、権限の問題がある可能性があります。また、始めたばかりなので、改善されたテスト スクリプトを次に示します。

#!/usr/bin/perl
use strict;
use warnings;

#Useful for testing: Perl error messages, plus your die statements, will get
#sent to the browser.  Otherwise you will just see "Internal Server Error".
use CGI::Carp qw/fatalsToBrowser/;

#Always use the CGI module for your scripts.
use CGI; 

#Create simple HTML output (taken directly from CGI documentation).
my $q = CGI->new;                    # create new CGI object
print $q->header,                    # create the HTTP header
      $q->start_html('hello world'), # start the HTML
      $q->h1('hello world'),         # level 1 header
      $q->end_html;                  # end the HTML

詳細については、 CGIのドキュメントを参照してください。

また、明確にするために、「スクリプトヘッダーの早期終了」エラーは、スクリプトがブラウザーに出力を送信しなかったことを意味します。この場合、スクリプトが実行されなかったことが原因です。ただし、スクリプトが実行されても実際には出力が送信されない場合にも発生する可能性があります。知っておくと便利なエラーです。

于 2012-10-25T07:35:14.183 に答える
1

perl スクリプトのパーミッションを正しく設定しましたか? これらを、bash スクリプトに設定した権限と比較してください。

ここでchmod 755提案されているように役立つかもしれません(残念ながらドイツ語のみ)

于 2012-10-25T07:35:00.650 に答える
0

httpd を実行しているユーザーを確認する

[root@www ~]# top | grep httpd
15607 apache    16   0  210m  19m 4228 S 23.5  0.2   0:00.52 httpd

上記では、apache ユーザーが実行されています。

su apache を試してみてください。

コマンド whoami を使用して、Apache であることを確認します。

apache に切り替えていない場合、ユーザー apache にシェルが割り当てられていないことを意味します。

/etc/passwd ファイルを変更する

ユーザーApacheを見つけて、末尾を変更します

/bin/false

to 

/bin/bash

passwd ファイルを保存し、su apache を試し、whoami で確認します。ユーザー apache に正常に切り替えられた場合は、スクリプトが配置されているディレクトリに移動し、そこから実行してみます。

あなたは次のようなものを得るでしょう

bash: /usr/bin/perl: Permission denied

これは、ユーザー「apache」がユーザー perl に対する権限を持っていないことを意味します。

ユーザー「apache」にperlスクリプトを実行する権限を追加する必要があります。

*** passwd ファイルを以前と同じように変更することを忘れないでください。

これを行うには、グループを特定のユーザーに追加し、グループ名を httpd.conf に変更します。

ありがとう

于 2012-10-26T03:13:30.693 に答える