0

我有奇怪的问题。,

从命令行cgi bash 脚本和 cgi perl 脚本工作,但从浏览器只有 cgi bash 脚本工作,而不是 cgi perl

从浏览器访问 cgi perl 脚本后,我得到500 Internal server error

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 的专用服务器。

4

3 回答 3

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

请参阅有关 CGI 的文档以获取更多信息。

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

于 2012-10-25T07:35:14.183 回答
1

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

也许会按照这里chmod 755的建议有所帮助(不幸的是,仅限德语)

于 2012-10-25T07:35:00.650 回答
0

检查哪个用户正在运行 httpd

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

在上面的 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 的权限。

您需要向用户“apache”添加执行 perl 脚本的权限。

***不要忘记像以前一样更改 passwd 文件。

您可以通过将组添加到特定用户并更改组名 httpd.conf 来做到这一点。

谢谢

于 2012-10-26T03:13:30.693 回答