Perl脚本未以HTML格式执行

时间:2011-12-29 15:19:33

标签: perl apache

我在名为Chrome的目录中有一个guestbook.htm文件(/home/chankey/Desktop/Chrome/guestbook.htm),其内容如下:

<html>
<head>
<title>Guestbook</title>
</head>
<body>

<form action="/home/chankey/Desktop/Chrome/guestbook.pl" method="get">
<table>
<tr><td>Name</td><td><input name="name" type="text" value=""></td></tr>
<tr><td>E-Mail</td><td><input name="email" type="text" value=""></td></tr>
<tr><td>Location</td><td><input name="loc" type="text" value=""></td></tr>
<tr><td>Comments</td><td>
<TEXTAREA name="comments" rows="10" cols="32"></TEXTAREA></td></tr>
</table><br><br>
<input type="submit" value="Add Entry">
</form>

</body>
</html>

在同一个Chrome目录中,我有一个文件“guestbook.pl”,其内容为

#!/usr/bin/perl

my $query_string = "";
#Get the input
if ($ENV{REQUEST_METHOD} eq 'POST') {
read(STDIN, $query_string, $ENV{CONTENT_LENGTH});
} else {
$query_string = $ENV{QUERY_STRING};
}
##### We will remove this
print "Content-Type: text/html\n\n";
print "Query String is \n<br> $query_string";
##### We will remove this

当我执行guestbook.htm文件时,会出现一个表单,当我填写数据并单击“添加条目”按钮时,将打开一个新页面,其中显示完整的脚本。

即。脚本“guestbook.pl”没有执行。我可以知道这背后的原因吗?为什么脚本没有执行? (我已经给了这个文件的执行权限。)

在httpd.conf文件中我添加了

AddHandler cgi-script cgi pl
<Directory /home/chankey/Desktop/Chrome/>
    Options +ExecCGI
</Directory>

仍然没有执行。让我知道原因。

1 个答案:

答案 0 :(得分:4)

当您在本地访问文件(通过浏览器中的file://类型URL)时,它不是从Web服务器运行的,所以:

  • 没有CGI环境
  • httpd.conf / .htaccess个文件无效

有几种方法可以解决这个问题:

  • 在您家中创建名为public_html的文件夹。您的网络服务器可能具有将http://localhost/~chankey/映射到/home/chankey/public_html的设置。 (在MacOSX上,首选名称为Sites,我相信。)在SELinux系统上,您必须专门授予Apache使用此方法的权限。
  • 对于使用标准CGI包的Perl脚本的特定情况,您也可以从终端shell手动运行它们,并将其输出重定向到临时文件(例如>/tmp/output.html),然后可以访问
  • 将您的开发工作区迁移到Web服务器自己的目录结构中,通常为/var/www/html/ ...

PS /无关:我强烈建议,如果您打算将其放在互联网上,您应该use CGI; use strict;并启用污点模式#!/usr/bin/perl -WT ......