2010-12-01 3 views
1

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.

+0

Es scheint, dass Ihr Webserver keine Berechtigung zum Lesen von $ tar_directory hat. – gangabass

+0

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

+0

Es konnte fehlschlagen, wenn die höheren Verzeichnisse nicht über ausreichende Berechtigungen verfügten. – Sorpigal

Antwort

0

Nur eine Vermutung. Ihr ftp-> put schlägt fehl und löst den Würfel aus. Es sei denn, Sie haben:

use CGI::Carp qw(carpout fatalsToBrowser); 

Sie werden die sterben Nachricht in Ihrem Browser nicht sehen. Seit Sie gestorben sind, sehen Sie auch nicht die endgültige Druckanweisung.

Überprüfen Sie Ihr Webserver-Protokoll für die Chip-Ausgabe, oder ändern Sie einfach "sterben" zu "drucken".

+0

ich habe CGI :: Karpfen qw (warningsToBrowser fatalsToBrowser); – wDroter

+0

Hmmm ... Ok, ich wette immer noch, dass put() versagt. Ändere diesen Würfel in einen Druck. – jimtut

0

Net::FTP kann put() aus einer Dateikennung sowie ein Dateiname:

open my $fh, '<', $tar_directory . '/' . $filename or die "Could not open file: $!"; 
$ftp->put($fh, $filename) or die "cannot put file ", $ftp->message; 

Wenn das Problem auf Ihrer Seite ist, dann sollten die open fehlschlagen, und Sie sollten eine Fehlermeldung von einer Art, die wird hoffentlich bekommen , sag dir was falsch ist; Wenn das Problem auf der Remote-Seite ist, sollte die put fehlschlagen und Sie werden das gleiche sehen, was Sie jetzt sehen.

Das $ftp->message hat nur die Erfolgsmeldung von der cwd zeigt an, dass alles auf der Remote-Seite in Ordnung ist und die put erreicht nicht einmal den Remote-Server.