2009-08-02 82 views
1

我真的不知道如何运行Perl文件。我已经将我的.pl上传到cgi-bin,然后将chmod上传到755.然后,当我去运行该文件时,我得到一个500内部服务器错误。为什么我的Perl CGI脚本不工作?

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


#!/usr/bin/perl 

print 'hello world'; 

有关我在做什么错的任何想法?

+0

您的网络服务器错误日志是否提供任何启发性信息? – draegtun 2009-08-02 19:29:34

+0

哪个网络服务器和哪个操作系统? – 2009-08-02 19:32:14

+0

我在cpanel的错误日志中看不到任何东西。我是Unix的Linux。 – pjanaway 2009-08-02 19:34:17

回答

10

你可能需要您的打印语句之前类似

print "Content-type: text/html\n\n"; 

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

这将有助于知道您正在使用的服务器以及服务器日志中显示的确切错误消息。我猜测,如果你使用Apache,你会看到类似“脚本头文件过早结束”的内容。

2

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

然后,尝试:

#!/path/to/perl/binary 

use strict; 
use warnings; 

$| = 1; 

use CGI qw(:default); 

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

考虑使用CGI::Carp输出致命错误给浏览器。 use CGI::Carp qw(fatalsToBrowser);

此外,请务必使用CGI module输出任何所需的信息,如标题/ HTML /无论。打印一切是错误的做法。

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

1

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

./helloworld.pl 

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

Content-Type: text/html 

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

如果不是这种情况,解决这个问题。

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

Content-Type: text/html 

hello world 

如果你可以运行你的脚本,这就是输出,然后有事情很奇怪。如果Apache没有将错误记录到某个文件的error_log文件中,那么可能存在一些问题。

0

你启用的Apache服务器.pl文件作为CGI脚本?检查你的Apache配置文件,或(快速但不保证测试)尝试将文件扩展名更改为.cgi。此外,请确保您的shebang线(#!)位于最顶端。最后,如果你的服务器是Linux,那么检查行结束符是Unix。是的,请从命令行进行测试,并对潜在错误提供更好的反馈。

相关问题