Apache 为什么我会得到一个“a”;“拒绝许可”;此Perl CGI脚本出错?

Apache 为什么我会得到一个“a”;“拒绝许可”;此Perl CGI脚本出错?,apache,perl,ubuntu,scripting,cgi,Apache,Perl,Ubuntu,Scripting,Cgi,我试图制作一个Perl脚本,当远程主机访问某个网站时,该脚本将获取其IP地址。然而,我似乎无法克服这个apache错误: 在路径到脚本第19行的权限被拒绝 我在Ubuntu服务器上运行一个网站,我已经正确配置了Apache2和CGI 下面是login.pl脚本: #!/usr/bin/perl -T use CGI; use DBI; use strict; use warnings; use Path::Class; use autodie; # read the CGI param

我试图制作一个Perl脚本,当远程主机访问某个网站时,该脚本将获取其IP地址。然而,我似乎无法克服这个apache错误:

在路径到脚本第19行的权限被拒绝

我在Ubuntu服务器上运行一个网站,我已经正确配置了Apache2和CGI

下面是
login.pl
脚本:

#!/usr/bin/perl -T
use CGI;
use DBI;
use strict;
use warnings;
use Path::Class;
use autodie;    

# read the CGI params
my $cgi = CGI->new;
my $username = $cgi->param("username");
my $password = $cgi->param("password");

my $port = $cgi->remote_host();

my $dir = dir("var/www/html");
my $file = dir->file("testingPerl.txt");
my $file_handle = $file->openw();
$file_handle->print($port);
我是Perl新手,不太明白为什么会出现此错误。

由于以下语句,您会遇到“权限被拒绝”错误:

my $dir = dir("var/www/html");
路径
var/www/html
是相对于脚本的当前工作目录的,它不太可能存在。您可能想要的是
/var/www/html

但是,您的脚本使用运行web服务器的用户id的权限运行。在正常配置中,通常不允许该用户写入
/var/www/html
。因此,解决这一问题可能无法解决您的问题

此外,请注意,如果使用or,则不需要或不希望使用autodie:它们都会在出现错误时发出咯咯声

您可以尝试以下简单脚本,看看是否一切正常:

#!/path/to/perl -T

use strict;
use warnings;
use CGI;

my $cgi = CGI->new;
print $cgi->header('text/plain'), $cgi->remote_host, "\n";

最后,看起来您将覆盖每个访问者的输出文件。

这是我编写的唯一一个perl脚本,因此…@zdimI理解@zdim,但上面的脚本是“login.pl”,很抱歉我将问题更新为该文件。否则我不知道错误可能来自哪里…好吧,更好@zdim,我应该补充什么让它更清楚吗?我建议我们整理并删除这些不再有用的评论(前两个和后两个,也许?)。当您将鼠标悬停在评论上时,它会显示一个小十字,如果您单击它,评论将被删除(首先会出现确认对话框)。非常感谢您的帮助!是的,首先,我将尝试写入一个文件,但是,每当我尝试写入时,在问题中的更新代码中,我会在apacheerror.log中得到一个权限拒绝错误。我已经阅读了一些关于这个问题的文章,显然用“chmod”更改权限并不能解决这个问题。有什么想法@zdim?