2016-06-30 14 views
1

Ich versuche ein Perl-Skript zu erstellen, das die IP-Adresse eines Remote-Hosts annimmt, wenn er eine bestimmte Website besucht. Allerdings kann ich nicht über dieses Apache Fehler zu erhalten scheinen:Warum erhalte ich bei diesem Perl-CGI-Skript den Fehler "Berechtigung verweigert"?

Permission denied at path_to_perl_script line 19

ich eine Website auf einem Ubuntu-Server am laufen und ich habe Apache2 und CGI richtig konfiguriert ist. Hier

ist das login.pl Skript:

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

Ich bin ziemlich neu in Perl und ich verstehe nicht ganz, warum ich diese Störung erhalte.

+0

Dies ist das einzige Perl-Skript, das ich gemacht habe, also ..... @ zdim –

+0

Ich verstehe @ zdim, aber das Skript oben ist "login.pl", Entschuldigung für die Verwirrung Ich habe die Frage aktualisiert, um dies zu sagen ist diese Datei. Ansonsten weiß ich nicht, woher der Fehler kommen könnte ... –

+0

Okay, besser? @zdim, Sollte ich etwas hinzufügen, um es klarer zu machen? –

Antwort

2

Sie erhalten eine wegen dieser Aussage Fehler „Zugriff verweigert“:

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

Der Pfad var/www/html ist relativ zum aktuellen Arbeitsverzeichnis des Skripts und es ist unwahrscheinlich, dass es exsits. Was Sie wahrscheinlich wollen, ist /var/www/html.

Ihr Skript wird jedoch mit den Rechten der Benutzer-ID ausgeführt, unter der der Webserver ausgeführt wird. In normalen Konfigurationen darf dieser Benutzer häufig nicht in /var/www/html schreiben. Also, das Problem zu beheben, kann Ihr Problem nicht beheben.

Beachten Sie außerdem, dass Sie keine Autodie brauchen oder wollen, wenn Sie Path::Class oder Path::Tiny verwenden: Beide quaken bei einem Fehler.

Sie können dieses einfache Skript versuchen, wenn alles zu sehen arbeitet:

#!/path/to/perl -T 

use strict; 
use warnings; 
use CGI; 

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

Schließlich sieht es aus wie Sie die Ausgabedatei für jeden Besucher überschrieben werden.