webmatze.de

FTP mit PHP

14. 01. 2006 · PHP

In diesem Artikel möchte ich mich etwas näher mit den Fähigkeiten von PHP auseinandersetzen. Ich möchte euch einen einfachen Weg zeigen, wie ihr mittels PHP eure Dateien auf einen FTP Server uploaden könnt. Warum man dies in PHP machen sollte und nicht etwa mit einem normalen FTP Client Programm? Nun, dafür gibt es mehrere Gründe.

Oft kann es vorkommen, das man sich hinter einer Firewall befindet und keinen Zugang auf den FTP Port erhält. Somit lassen sich keine FTP Clients verwenden. Oder man möchte Benutzern der eigenen Seite eine Möglichkeit bieten, Dateien per FTP auf den Server zu kopieren. Beides lässt sich mit einem simplen Formular und etwas PHP bewältigen. Doch kommen wir gleich zum Eingemachten.

Um FTP benutzen zu können, benötigen wir ein paar Funktionen, die ich im Folgenden näher erklären werde.

ftp_connect - Verbindung zum Host herstellen

Als allererstes müssen wir eine Verbindung zum FTP Host herstellen. Das geschieht mit der Funktion

ftp_connect(String Host, int[Port]).

$ftp_server = "ftp.meinserver.de";
$connection_id = ftp_connect($ftp_server);

Der Parameter Port ist optional und standardmäßig auf 21 eingestellt, was der Standard Port für FTP ist.

ftp_login - Anmelden einer FTP-Verbindung

Nachdem wir eine Verbindung zum Host hergestellt haben, müssen wir uns nur noch mit Benutzernamen und Passwort anmelden. Die dazugehörige Funktion in PHP lautet

ftp_login (int conn_id, string Benutzername, string Passwort).

$benutzername = "Benutzername";
$passwort = "Passwort";
$login_result = ftp_login($connection_id, $benutzername, $passwort);

Wenn alles gutgegangen ist, haben wir jetzt Zugriff auf die Dateien. Nun müssen wir nur noch die gewünschte Datei hochladen.

ftp_put - Datei auf den FTP Server übertragen

Sehen wir uns zuerst einmal die Funktion an.

ftp_put (int conn_id, string Zieldatei, string Lokale_Datei, int Modus)

Lokale_Datei ist hierbei die Datei die als Datei namens Zieldatei auf dem Server gespeichert werden soll. Wichtig ist auch der Parameter Modus, der bestimmt ob die Datei im binären (FTP_BINARY) oder im ASCII (FTP_ASCII) Modus übertragen wird. In unserem Beispiel würde das Ganze dann wie folgt aussehen:

$zieldatei = "test.htm";
$lokale_datei = "test.htm";
$upload = ftp_put ($connection_id, $zieldatei, $lokale_datei, FTP_ASCII);

ftp_quit - Die FTP Verbindung wieder schließen

Wenn alles erledigt wurde, was zu erledigen war, müssen wir die Verbindung auch wieder schließen. Ordnung muß sein. Die dazugehörige Funktion ist sehr simple.

ftp_quit(int conn_id)

Sie ist so simple, das ich jetzt kein Beispiel zeigen möchte, sondern lieber gleich alles in einem großen Script zusammenfasse.

Das fertige Script

Als Beispiel möchte ich euch ein einfaches Script zeigen, das es Besuchern erlaubt Textdateien auf einen gewünschten FTP Server zu laden. Dazu können sie die Datei mit folgendem Formular auswählen und abschicken:



Datei Upload



	

Schicken Sie uns ihre Texte

Wählen Sie eine Textdatei (txt, html usw.) von Ihrem Rechner aus:

Verzeichnis/Zieldatei

Ist das Formular ausgefüllt und abgeschickt, werden die Daten an das folgende Script gesendet und dort verarbeitet. Die drei ersten Variablen müssen noch an den eigenen FTP Server angepasst werden. Die Dateien werden relativ zu dem Verzeichnis abgelegt, in dem sich dieses Script befindet.

Ftp-Verbindung nicht hergestellt!

"; echo "

Verbindung mit ftp_server als Benutzer $benutzername nicht möglich!

"; die; } else { echo "

Verbunden mit ftp_server als Benutzer $benutzername

"; } // Die aus dem Forumular übergebenen Daten abfragen $zieldatei = $_POST['zieldatei']; $lokale_datei = $_POST['lokale_datei']; // Hochladen der datei $upload = ftp_put($connection_id, $zieldatei, $lokale_datei, FTP_ASCII); // Upload-Status überprüfen if (!$upload) { echo "

Ftp upload war fehlerhaft!

"; } else { echo "

Datei $slokale_datei auf $host als $zieldatei geschrieben

"; } // Schließen der Verbindung ftp_quit($connection_id); ?>

So jetzt alles auf euren Server laden und fertig.

Wichtig!

Da es dieses Script jedem erlaubt Dateien auf euren Server zu laden, solltet ihr es mit Bedacht einsetzen. Denkbar wäre ein Passwortschutz und eine Beschränkung der Dateigröße.