为什么我的Perl CGI脚本不起作用?

时间:2009-08-02 19:25:14

标签: perl cgi

我真的不知道如何运行Perl文件。我已将.pl上传到cgi-bin然后chmod到755.然后,当我去运行该文件时,我得到500内部服务器错误。

**/cgi-bin/helloworld.pl**


#!/usr/bin/perl

print 'hello world';

关于我做错了什么的想法?

7 个答案:

答案 0 :(得分:15)

阅读官方Perl CGI FAQ

这会回答这个问题,还有许多其他问题。

例如:"My CGI script runs from the command line but not the browser. (500 Server Error)"

希望这有帮助!

答案 1 :(得分:10)

你可能需要像

这样的东西
print "Content-type: text/html\n\n";
在打印声明之前

。看看http://httpd.apache.org/docs/2.0/howto/cgi.html#troubleshoot

了解您正在使用的服务器以及服务器日志中显示的确切错误消息将会有所帮助。我想如果你使用Apache,你会看到类似“脚本标题的过早结束”之类的内容。

答案 2 :(得分:3)

调查使用CGI::Carp向浏览器输出致命错误。 use CGI::Carp qw(fatalsToBrowser);

另外,请务必使用CGI module输出所需的任何信息,例如headers / html / whatever。打印它是错误的方法。

编辑:你也一定能够查看某种错误日志。

答案 3 :(得分:3)

也许你需要我的Troubleshooting Perl CGI scripts

答案 4 :(得分:2)

首先,找出该系统上perl的路径,并确保shebang线正确。提供有关系统和Web服务器的更多信息也有助于其他人诊断。

然后,尝试:

#!/path/to/perl/binary

use strict;
use warnings;

$| = 1;

use CGI qw( :default );

print header('text/plain'), "Hello World\n";

答案 5 :(得分:1)

确保您可以从shell提示符运行脚本,而无需通过Perl调用它。换句话说,您应该能够转到cgi-bin目录并输入:

./helloworld.pl

并获得输出。如果这不起作用,请修复它。在查看输出时,第一行必须是:

Content-Type: text/html

(或text/plain或其他一些有效的MIME类型。)

如果情况并非如此,请修复此问题。

然后,在打印页面正文之前,您必须有一个空行。如果没有空行,则您的脚本将不能用作CGI脚本。所以你的总输出应该是这样的:

Content-Type: text/html

hello world

如果你可以运行你的脚本并且那是输出,那么就会发生一些奇怪的事情。如果Apache没有将错误记录到某个地方的error_log文件中,那么它可能存在一些问题。

答案 6 :(得分:0)

您是否已将Apache作为CGI脚本启用服务器.pl文件?检查您的Apache配置文件,或(快速但不保证测试)尝试将文件扩展名更改为.cgi。另外,确保你的shebang线(#!)位于最顶端。最后,如果您的服务器是Linux,请检查行结尾是否为Unix。是的,从命令行测试它,use strict;以获得有关潜在错误的更好反馈。