cgi perl脚本不起作用,只有cgi bash脚本正常工作?

时间:2012-10-25 07:00:12

标签: perl apache cgi

我有一个奇怪的问题。

来自命令行cgi bash脚本和cgi perl脚本正在运行,但仅来自浏览器cgi bash脚本正在运行,而不是cgi perl

从浏览器访问cgi perl脚本后,我得到 500内部服务器错误

and apache error log says

[Thu Oct 25 01:58:59 2012] [error] [client x.x.x.x] (13)Permission denied: exec of '/home/x/x/x/x/public_html/cgi-bin/test.cgi' failed
[Thu Oct 25 01:58:59 2012] [error] [client x.x.x.x] Premature end of script headers: test.cgi

我想从浏览器运行cgi perl脚本。

我该怎么做。

[root@www ~]# which perl
/usr/bin/perl

[root@www cgi-bin]# perl test.cgi
Content-type: text/plain

testing...

test.cgi的来源

#!/usr/bin/perl

print "Content-type: text/plain\n\n";
print "testing...\n";

感谢您的时间。

它是一个带有apache 2的专用服务器。

3 个答案:

答案 0 :(得分:2)

如Barmar所述,您可能有权限问题。此外,由于您刚刚开始,这是一个改进的测试脚本:

#!/usr/bin/perl
use strict;
use warnings;

#Useful for testing: Perl error messages, plus your die statements, will get
#sent to the browser.  Otherwise you will just see "Internal Server Error".
use CGI::Carp qw/fatalsToBrowser/;

#Always use the CGI module for your scripts.
use CGI; 

#Create simple HTML output (taken directly from CGI documentation).
my $q = CGI->new;                    # create new CGI object
print $q->header,                    # create the HTTP header
      $q->start_html('hello world'), # start the HTML
      $q->h1('hello world'),         # level 1 header
      $q->end_html;                  # end the HTML

有关详细信息,请参阅documentation on CGI

此外,为了澄清:“脚本标头的过早结束”错误意味着您的脚本没有向浏览器发送任何输出。在这种情况下,这是因为您的脚本没有运行。但是,如果您的脚本运行但实际上并未发送任何输出,也可能发生这种情况。了解这是一个有用的错误。

答案 1 :(得分:1)

您是否为perl脚本正确设置了权限? 将它们与您为bash脚本设置的权限进行比较。

根据建议here(仅限德语​​)

chmod 755可能会有所帮助

答案 2 :(得分:0)

检查哪个用户正在运行httpd

[root@www ~]# top | grep httpd
15607 apache    16   0  210m  19m 4228 S 23.5  0.2   0:00.52 httpd

上面的apache用户正在运行。

尝试su apache,

使用命令whoami确认你是apache,

如果你没有切换到apache,那么这意味着没有为用户apache分配shell,

现在修改/ etc / passwd文件

找到用户apache并更改结尾 来自

/bin/false

to 

/bin/bash

保存passwd文件,然后尝试su apache,检查whoami, 如果您成功切换到用户apache然后转到脚本所在的目录并尝试从那里运行它。

你会得到像

这样的东西
bash: /usr/bin/perl: Permission denied

这意味着用户" apache"没有用户perl的权限。

您需要添加权限以执行perl脚本给用户" apache"。

***别忘了像之前一样更改passwd文件。

您可以通过向特定用户添加组并更改组名httpd.conf来实现。

感谢