我有一个奇怪的问题。
来自命令行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的专用服务器。
答案 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)
答案 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来实现。
感谢