HTML 表单操作最终下载 perl 文件而不是执行它

Posted

技术标签:

【中文标题】HTML 表单操作最终下载 perl 文件而不是执行它【英文标题】:HTML form action ends up downloading perl file instead of executing it 【发布时间】:2013-03-05 16:31:10 【问题描述】:

我一直在尝试在 Windows 7 上运行一个简单的 perl-cgi 脚本。这是一个带有 OK 按钮的简单 html 表单,单击 OK 按钮会显示一些文本。但是点击 HTML 页面上的 OK 按钮,浏览器开始下载脚本,而不是执行和显示 perl 文件的输出。我在 httpd.conf 中添加了处理程序

AddHandler cgi-script .pl

但这无济于事。我在 httpd.conf 中添加了 ExecCGI 选项,但这也没有帮助。

<Directory "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin">
    AllowOverride None
    Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>

这里是使用的 perl 脚本:

#!C:\Perl\bin\perl
use CGI;

print "Content-type: text/plain","\n\n";
print "<html>","\n";
print "<head>\n\t<title>Server Information Ready</title>\n</head>","\n";
print "<body>","\n";
print "<h1>Server Information</h1>","\n";
print "</body></html>","\n";

这里是html文件:

<html>
<head><title>Server Information</title></head>
<body bgcolor="#EEAA55">
<h3>Please click OK to get the server information</h3>
<hr><pre>
<form action="http://localhost/cgi-bin/ctest/pranav1a.pl" method="post">
<input type="submit" value="OK">
</form>
</hr></pre>
</body>
</html>

我已经在 chrome、IE 和 Mozilla 上尝试过这个。 Mozilla 和 chrome 开始下载 perl 文件,但 IE 在单击 OK 按钮时只会显示一些奇怪的内容。 如何让浏览器显示文件执行的输出而不是开始脚本下载?

PS:我曾尝试将 shebang 行用作 '#!c:/Perl/bin/perl',但这似乎也不起作用。从 cmd 提示符执行时,我可以看到 perl 脚本的输出。

【问题讨论】:

您是否在实时服务器上对此进行了测试。 localhost 可能有这些问题,因为您需要配置很多选项。我建议你在生产环境中尝试一下 在 httpd.conf 中,确保这行没有注释:LoadModule cgi_module modules/mod_cgi.so 添加一个 ScriptAlias:&lt;IfModule alias_module&gt;ScriptAlias /cgi-bin/ "C:/BitNami/apache2/cgi-bin/"&lt;/IfModule&gt; ScriptAliases 与 Aliases 基本相同,只是目标目录中的文档被视为应用程序和在请求时由服务器运行,而不是作为发送给客户端的文档。 既然您决定使用 .pl 而不是 .cgi,您需要将其添加到 httpd.conf:AddHandler cgi-script .pl(可能已经有一个 .cgi 扩展名;如果没有, 也添加它。你可能想把你的 .pl 放在 /cgi-bin 而不是子目录 ctest 中。 【参考方案1】:

找到解决方案:在我的情况下,我在表单操作中使用“localhost”而不是“localhost:8080”。

<form action="http://localhost:8080/cgi-bin/pranav1a.pl" method="post">

【讨论】:

【参考方案2】:

+ExecCGI 选项怎么样?试试前面的+

另外,这些通常是理解suexec2的问题(不确定suexec2是否适用于Windows平台):

阅读whole page over there。如果您不了解 suexec 实施的总体限制,则此类问题无法解决。常见错误有:

suexec2 可执行文件的权限错误。 CGI 脚本位于错误的位置。

您通过apache.org/docs/2.2/howto/cgi.html#troubleshoot 工作了吗?

【讨论】:

我已经尝试了上面提到的所有建议,但似乎没有一个有效。我仍然得到正在下载的 perl 文件。【参考方案3】:

感谢斯卡沃科维奇。

在我的例子中,以下行在 httpd.conf 文件中被注释掉了。

#LoadModule cgi_module /opt/freeware/lib64/httpd/modules/mod_cgi.so

取消注释并重新启动 apache 允许 CGI 脚本运行而不是作为文本文件打开。

【讨论】:

以上是关于HTML 表单操作最终下载 perl 文件而不是执行它的主要内容,如果未能解决你的问题,请参考以下文章

perl 测试内容以查看是不是包含 HTML

Apache 正在下载 php 文件而不是显示它们

如何检查我是不是在 Perl 中下载了整个文件?

在 Perl 中,如何从文件中删除 ^M?

htaccess 下载文件而不是加载

Ajax表单上传进度条