为什么我得到了#34;许可被拒绝"这个Perl CGI脚本出错了吗?

时间:2016-06-30 22:02:22

标签: apache perl ubuntu scripting cgi

我正在尝试创建一个Perl脚本,当他们访问某个网站时会获取远程主机的IP地址。但是我似乎无法解决这个apache错误:

Permission denied at path_to_perl_script line 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的新手,我不太明白为什么会收到此错误。

1 个答案:

答案 0 :(得分:2)

由于此声明,您收到“权限被拒绝”错误:

my $dir = dir("var/www/html");

路径var/www/html相对于脚本的当前工作目录而言,它不太可能存在。你可能想要的是/var/www/html

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

此外,请注意,如果您使用Path::ClassPath::Tiny,则不需要或不需要autodie:它们都会出错。

您可以尝试使用这个简单的脚本来查看一切是否正常:

#!/path/to/perl -T

use strict;
use warnings;
use CGI;

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

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