3

私は、perl サーバーと apache サーバーの両方を初めて使用します。基本的な Hello World を CGI スクリプトに使用しようとしています。私の Hello World CGI ファイルのコードは次のとおりです。

#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "<H1>Hello World</H1>\n";

コマンド ラインで CGI スクリプト ./hello.cgi を実行すると機能しますが、ブラウザーで hello.cgi を開くと、cgi ファイルのテキストが表示されるだけです。

/var/log/apache2/error_log の error_log を見ると、mod_perl が実行されていることがわかります。

Apache/2.2.21 (Unix) DAV/2 mod_perl/2.0.5 Perl/v5.12.3 configured -- resuming normal operations

しかし、次の perl プログラムを実行すると、「MOD_PERL」環境変数がないように見えます。

if (exists $ENV{"MOD_PERL"}) {
   print "YAY!\n";
 }
else{
    print"mod_perl is not working\n";
 }

ちなみに、私の hello.cgi ファイルと上記の perl スクリプトは /Users/myusername/Sites/ にあります。

ブラウザで hello.cgi を適切に表示できるように、mod_perl を適切に構成するのを手伝ってくれる人はいますか? mod_perl のドキュメントを読んだり、フォーラムを検索したりして何時間も無駄に過ごしてきました。前もって感謝します

@SebastianStumpf 最初の例が機能するようになりましたが、まだ mod_perl スクリプトを実行できないようです。ドキュメントを読んでいますが、理解できませんでした。ところで、助けてくれてありがとう。とても感謝しています

更新:私はそれがうまくいったと信じています!助けてくれてありがとう!

4

1 に答える 1

3

Mac OS X Lion のストック Apache/Perl を使用していて、mod_perl が必要ない場合は、何も設定する必要はありません。で .cgi 拡張子のファイルを作成し/Library/WebServer/CGI-Executablessudo chmod 755 file.cgi. スクリプトは (mod_perl ではなく) CGI 経由で実行されます。私はこれを試してみましたが、うまくいきました:

$ sudo -s
# cat - > /Library/WebServer/CGI-Executables/test.cgi
#!/usr/bin/perl
use strict;
use warnings;
use CGI qw/:standard/;
use Data::Dumper;
print header, start_html, h1('works'), end_html;
^D

# sudo chmod 755 /Library/WebServer/CGI-Executables/test.cgi
# exit

テスト:

$ curl -i http://localhost/cgi-bin/test.cgi
HTTP/1.1 200 OK
Date: Mon, 11 Jun 2012 22:29:24 GMT
Server: Apache/2.2.21 (Unix) DAV/2
Transfer-Encoding: chunked
Content-Type: text/html; charset=ISO-8859-1

<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<h1>works</h1>
</body>
</html>

mod_perl が必要な場合は、ドキュメントを参照してください。mod_perl を実行するために必要なのは、イントロダクションの設定部分だけです。

編集:

次の行を に追加/etc/apache2/httpd.confし、Web サーバーを再起動すると、mod_perl が機能します。

LoadModule perl_module libexec/apache2/mod_perl.so
Alias /perl /Library/WebServer/perl
<Location /perl>
    SetHandler perl-script
    PerlResponseHandler ModPerl::Registry
    Options ExecCGI
    PerlSendHeader On
    Order allow,deny
    Allow from all
</Location>

スクリプトが保存されている場合、/Library/WebServer/perl/すべての mod_perl ヘッダーが使用可能になっていることがわかりますが、Apache/mod_perl のプライベート インストールをセットアップしたいと思います。MacPortsはこれをずっと簡単にします...

于 2012-06-11T22:17:45.840 に答える