我有奇怪的问题,
在命令行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。
正如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文件以获取更多信息。
此外,对于澄清:“脚本头过早结束”错误意味着你的脚本没有发送输出到浏览器。 在这种情况下,那是因为你的脚本未运行。 但是,它也可以,如果你的脚本运行,但实际上并没有发送任何输出发生。 它是了解一个有用的错误。
你的Perl脚本正确设置权限? 与您的bash脚本设置权限对它们进行比较。
也许chmod 755
将帮助作为建议在这里 (只有不幸的是德语)
检查哪个用户通过运行的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,
现在修改/ etc / passwd文件
找到用户Apache和改变从结束
/bin/false
to
/bin/bash
保存passwd文件,然后尝试苏阿帕奇,与WHOAMI检查,如果成功切换到用户阿帕奇然后转到该脚本所在的目录,并尝试从那里运行它。
你会得到像
bash: /usr/bin/perl: Permission denied
这意味着用户“阿帕奇”没有权限用户的Perl。
您需要添加的权限来执行perl脚本用户“阿帕奇”。
***不要忘了更改passwd文件,因为它是以前。
您可以通过添加一组特定的用户和不断变化的组名httpd.conf中做到这一点。
谢谢