Inhalt Perl Einführung: Das Net::FTP Modul |
Dieses objektorientierte Modul macht es relativ einfach möglich skriptgesteuert auf einen FTP Server zuzugreifen, um z.B Uploads und Downloads zu automatisieren. Der Gebrauch des Moduls setzt allerdings Vertrautheit mit den grundlegenden FTP Befehlen voraus wie z.B. put und get. Wer diese Befehle nicht kennt, sollte sich den ftp Befehl auf einer Linux oder Windows Machine näher anschauen.
In einem kleinen Beispielskript werden wir zunächst eine Datei von einem FTP-Server herunterladen.
use Net::FTP; # Einbinden des FTP-Moduls $server="ftp.server.com"; # Hier wird die Adresse des FTP-Servers # festgelegt (Hostname oder IP-Adresse) $username="anonymous"; # Benutzername auf dem FTP-Server $password="perl@tekromancer.com"; # Passwort für den Benutzer anonymous $datei="datei.txt"; # Der Name der Datei $ftp=Net::FTP->new($server, Debug=>0) || die "Keine Verbindung mit $server.\n"; # Erzeugen des FTP-Objektes, als Intitialisierungsparameter # wird die Adresse des FTP-Servers übergeben $ftp->login($username, $password) || die "Fehler beim einloggen.\n"; # Einloggen auf FTP-Server mit User-Name und # Passwort $ftp->get($datei) || die "Fehler beim herunterladen von $datei auf $server.\n"; # hier findet der eigentliche Download # der Datei statt $ftp->quit() || die "Fehler beim ausloggen von $server.\n\n"; # Abmelden vom FTP-Server
Wie bereits in der Einleitung zu diesem Kapitel beschrieben, wird in der ersten Zeile des Skripts das Modul eingebunden, das Verwendung finden soll; in diesem Fall das Net::FTP Modul. Die anschließende Deklaration der Variabeln, die für einen Verbindungsaufbau notwendig sind, dürfte keine Schwierigkeiten bereiten. Natürlich ist es auch möglich, dieses Angaben vom Benutzer eingeben zu lassen. Dies macht in den meisten Fällen auch Sinn. Die erste interessante Zeile ist
$ftp=Net::FTP->new($server, Debug=>0)
Hier wird ein neues FTP Objekt erzeugt, das mit der Addresse des FTP Servers initialisiert wird, von dem eine Datei heruntergeladen wird. Bei diesem Objekt handelt es sich natürlich nicht um ein konkretes Objekt in der Wirklichkeit wie in unserem LKW Beispiel. Es handelt sich vielmehr um die Verbindung mit dem FTP Server, die bei bei der Erzeugung des neuen Objekts hergestellt wird. Dieses "Verbindungsobjekt" wird nun über seinen Namen, $ftp, angesprochen. Stört euch nicht an dem zusätzlichen Initialisierungsparameter Debug=>0, der den sogenannten Debug-Modus ausschaltet. Zur Dokumention dieses Moduls werden wir weiter unten noch Bemerkungen machen. Nachdem das Objekt erzeugt und mit einem Namen, $ftp, versehen worden ist, kann es nun mittels Methoden manipuliert bzw. verwendet werden werden. Genau dies passiert in den folgenden Skriptzeilen. Logisch gesehen passiert in den folgenden Zeilen genau dasselbe wie wenn man manuell eine Verbindung mit einem FTP Server aufbaut: Man loggt sich ein mittels Benutzernamen und Paßwort, lädt die Datei herunter und loggt sich wieder aus. Das Einloggen vollzieht sich in der der Zeile
$ftp->login($user, $password)
mittels der login Methode, die als Parameter Benutzernamen und Paßwort verlangt. Man beachte auch hier die Trennung von Objektnamen und Methodennamen mittels des Pfeiloperators.
Der eigentliche Download vollzieht sich in der Zeile
$ftp->get($datei)
mittels der get Methode, die als Argument den Namen der Datei verlangt, die vom FTP Server heruntergeladen werden soll. Nachdem die Datei heruntergeladen worden ist, loggt sich das Skript mittels der quit Methode aus dem FTP Server aus. Man beachte, daß der quit Methode, obwohl sie keine Parameter nimmt, dennoch von zwei Klammern () gefolgt wird. Diese dürfen nicht weggelassen werden
Vielleicht ist euch etwas aufgefallen. Die Datei datei.txt ist auf die lokale Machine heruntergeladen worden, aber wo steckt sie jetzt? Die Datei befindet sich jetzt in dem gegenwärtigen Arbeitsverzeichnis, das man natürlich kenn muß. Sinnvollerweise wird man normalerweise vor dem Herunterladen einer Datei das Arbeitsverzeichnis festlegen, damit man eine Datei nicht irgendwo auf seinen Festplatten suchen muß. Diejenigen von Euch, die sich mit ftp auskennen, kennen sicherlich den Befehl lcd, mit dem man auf der lokalen Machine das Arbeitsverzeichnis wechseln kann. Auch das FTP Modul kennt eine lcd Methode. Das Argument ist der Pfad auf der lokalen Machine, wo man die entfernte Datei abspeichern möchte. Nach der Einlogsequenz sollte man eine Zeile wie die folgende einfügen, um nach dem Download die Datei dort vorzufinden:
$ftp->lcd("c:\\download")
Das Vorgehen bei einem Upload ist im wesentlichen das gleiche, statt der FTP->get Methode wird aber FTP->put verwendet.
$ftp->put($datei) ||"die "Fehler beim heraufladen von $datei auf $server.\n";
Auch beim Upload wird die Datei $datei im aktuellen Arbeitsverzeichnis gesucht.
Um das Arbeitsverzeichnis auf dem Server zu wechseln, gibt es im FP-Modul ebenfalls eine Methode: FTP->cwd
Das aktuelle Arbeitsverzeichnis kann man mit der Methode FTP->pwd ermitteln.
$ftp->cwd("test"); # wechselt in das Verzeichnis Test auf dem # FTP-Server print $ftp->pwd(); # gibt das aktuelle Arbeitsverzeichnis aus
Zwei weitere wichtige Methoden sind FTP->binary und FTP->ascii. Mit diesen beiden Methoden kann man die Übertragungsart der Dateien zwischen Binär- und ASCII-Modus umschalten. Der ASCII-Modus sollte nur für reine Textdateien wie z. B. Perl-Skripte verwendet werden. Grafiken, Word-Dokumente und andere Dateien, die nicht aus reinem Text bestehen, sollte man nur im Binärmodus übertragen.
$ftp->ascii(); # wechselt in ASCII Modus $ftp->get("readme.txt"); # download einer Textdatei $ftp->binary(); # In Binärmodus wechseln $ftp->put("picture.jpg"); # Upload Grafikdatei
Für eine Dokumentation des FTP Moduls sollte man sich die während der Installation erzeugten HTML-Seiten ansehen. Im Perl Verzeichnis existiert unter html\lib für jedes Modul eine recht ausführliche Beschreibung. Die des FTP-Moduls findet man unter html\lib\site\Net\FTP.html
Perl Einführung: Das Net::FTP Modul Inhalt |