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:<IfModule alias_module>ScriptAlias /cgi-bin/ "C:/BitNami/apache2/cgi-bin/"</IfModule>
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 文件而不是执行它的主要内容,如果未能解决你的问题,请参考以下文章