Der Code für meine sub:Unterschiedliche Ergebnisse für Kommandozeile und CGI für Perl-Webformular Skript
sub put_file
{
my($host, $placement_directory, $tar_directory, $filename, $user, $pass) = @_;
my $ftp = Net::FTP->new($host) or die "cannot connect to localhost";
$ftp->login($user, $pass) or die "cannot log in";
$ftp->cwd($placement_directory);
print $tar_directory."/".$filename;
$ftp->put("$tar_directory/$filename") or die "cannot put file ", $ftp->message;
print "File has been placed \n";
}
Also, wenn diese Unter wird von einem Testskript aufgerufen (das läuft von der Kommandozeile), die die gleiche Konfiguration verwendet Datei und macht alle die gleichen Dinge wie das CGI-Skript, keine Fehler gefunden und die Datei ist korrekt platziert. Wenn die Subroutine von meinem CGI-Skript aufgerufen wird, gibt das Skript das $ tar_Verzeichnis aus. "/". $ Filename aber nicht "Datei wurde plaziert \ n" und die ftp-> Nachrichtenausgaben können das Dateiverzeichnis nicht erfolgreich ändern. " Das scheint von der cwd-Linie davor zu kommen.
Weitere Informationen: Ich habe versucht, das Testskript als mehrere Benutzer mit dem gleichen Ergebnis auszuführen. Ich benutze strenge und Warnungen. Die TAR-Datei, die verschoben wird, wird vom Skript erstellt.
Ich bin neu in Perl, also ist jeder Rat hilfreich, weil ich auf diesem stecken bleibe und keine Hilfe finden kann, die die Kraft von The Google benutzt.
Es scheint, dass Ihr Webserver keine Berechtigung zum Lesen von $ tar_directory hat. – gangabass
Die Ordnerberechtigungen für das bestimmte Verzeichnis ermöglichen allen Benutzern das Lesen aus dem Ordner. Würde es fehlschlagen, wenn höhere Verzeichnisse keine Berechtigungen hätten? – wDroter
Es konnte fehlschlagen, wenn die höheren Verzeichnisse nicht über ausreichende Berechtigungen verfügten. – Sorpigal