我是perl和apache服务器的新手。我正在尝试为CGI脚本获取基本的Hello World。这是我的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”env变量:
if (exists $ENV{"MOD_PERL"}) {
print "YAY!\n";
}
else{
print"mod_perl is not working\n";
}
顺便说一句,我的hello.cgi文件和上面的perl脚本位于/ Users / myusername / Sites /
有人可以帮我正确配置mod_perl,以便在浏览器中正确查看hello.cgi吗?我一直在阅读mod_perl文档和搜索论坛很多很多小时都无济于事。提前致谢
@SebastianStumpf我得到了你的第一个例子,但是我似乎仍然无法获得一个mod_perl脚本。我一直在阅读文档,但我无法弄明白。顺便说一下,谢谢你的帮助。我很感激
更新:我相信我的工作正常!谢谢你的帮助!
答案 0 :(得分:3)
如果您使用的是Mac OS X Lion 的Apache / Perl,并且不需要mod_perl ,那么您不必配置任何内容。只需在/Library/WebServer/CGI-Executables
中使用.cgi扩展名创建文件,然后通过sudo chmod 755 file.cgi
调整权限。该脚本将通过CGI(而不是mod_perl)执行。我试过这个并且它工作得很好:
$ 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,请查看文档。 <{3}}应该是让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的私有安装。 configuration part of the introduction让这更容易......