2016-06-30 2 views
1

특정 웹 사이트를 방문 할 때 원격 호스트의 IP 주소를 사용하는 Perl 스크립트를 만들려고합니다. 내가 우분투 서버에서 웹 사이트를 실행하고왜이 Perl CGI 스크립트에서 "허가 거부"오류가 발생합니까?

Permission denied at path_to_perl_script line 19

내가 제대로 아파치와 CGI를 구성 그러나 나는이 아파치 오류 과거를 얻을 수없는 것.

#!/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); 

나는 펄 상당히 새로운 오전과 내가이 오류를 얻고있다 왜 아주 이해가 안 : 여기

login.pl 스크립트입니다.

+0

이것은 내가 작성한 유일한 펄 스크립트입니다. @ zdim –

+0

@zdim은 이해하지만 위의 스크립트는 "login.pl"입니다. 혼란스러운 점에 대해 사과드립니다. 그 파일입니다. 그렇지 않으면 어디에서 오류가 올지 모를 ... –

+0

좋습니다. @zdim, 내가 더 명확하게하기 위해 무엇인가 추가해야합니까? –

답변

2

당신은 때문에이 문장의 오류를 "권한이 거부"점점 :

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

경로 var/www/html하면 스크립트의 현재 작업 디렉토리에 상대적이며 exsits 것 같지는 않다. 당신이 원하는 것은 /var/www/html입니다.

그러나 스크립트는 웹 서버가 실행되는 사용자 ID의 권한으로 실행됩니다. 정상적인 구성에서는 해당 사용자가 /var/www/html에 글을 쓸 수없는 경우가 많습니다. 그래서 문제가 해결되지 않을 수도 있습니다.

Path::Class 또는 Path::Tiny을 사용하는 경우 자동 반복이 필요하거나 필요하지 않습니다. 두 가지 모두 오류가 발생하면 오류가 발생합니다.

당신은 모든 것이 작동하는지 확인하기 위해 간단한 스크립트를 시도 할 수 있습니다 : 당신이 각 방문자에 대한 출력 파일을 덮어가는 것처럼

#!/path/to/perl -T 

use strict; 
use warnings; 
use CGI; 

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

마지막으로,이 보인다.

관련 문제