PHP Maniac

Das PHP Blog für PHP-Profis und alle die es werden wollen

FTP Verbindungen mit PHP

28 April, 2009 (18:47) | Code-Schnipsel, Grundlagen, PHP | Von: PHP Maniac

Im Rahmen meiner Grundlagenartikel, möchte ich heute die FTP Funktionen von PHP vorstellen, die sich besonders für automatische Backups anbieten. Wird ein FTP Skript beispielsweise über eine Cronjob aufgerufen, so können wichtige Dateien vom Webspace auf einem FTP gesichert werden. Alles vollautomatisch und ohne spezielle Funktionen wie exec(), die bei vielen Hostern eh deaktivert sind.
Natürlich können auch Daten von einem FTP herruntergeladen werden, um z.B. neue Informationen automatisch in eine Webseite einfließen zu lassen.

Verbindungsaufbau

Für die Kommunikation mit einem FTP Server muss zunächst einmal eine Verbindung hergestellt werden. Als Rückgabe erhält man eine Verbindungs-ID, die für alle weiteren FTP Befehle benötigt wird.

$cid = ftp_connect("ftp.host.de");

Um zu überprüfen, ob die Verbindung hergestellt wurde, lässt sich eine einfache If-Abfrage verwenden:

if($cid) { echo "OK"; }
else { echo "Connection error"; }

Steht die Verbindung, so müssen zunächst die Logindaten an den FTP Server gesendet werden. Dies ist auch nötig, wenn z.B. kein Passwort benötigt wird. In diesem Fall erwarten die meisten FTP Server eine beliebige E-Mail Adresse als Passwort.

$login = ftp_login($cid, $user, $passwort);

Ein erfolgreicher Login lässt sich, wie bereits oben anhand der Verbindungs-ID beschrieben, überprüfen. Dies ist auch dringend zu empfehlen, da sonst alle weiteren Befehle vom Server abgewiesen werden.

Wichtige FTP Befehle von PHP

Nach Verbindungsaufbau und Login stehen einem viele FTP Kommandos zur Verfügung, die wichtigsten werde ich kurz vorstellen:

//Verzeichnis erstellen
ftp_mkdir($cid, $remote_dir);
//Verzeichnis löschen
ftp_rmdir($cid, $remote_dir);
//Datei auf FTP-Server hochladen
ftp_put($cid, $local_file, $remode_file, $modus);
//Datei von FTP-Server herrunterladen
ftp_get($cid, $local_file, $remote_file, $modus);
//FTP-Verbindung schließen
ftp_close($cid);

Alle Befehle erwarten als ersten Parameter die Verbindungs-ID und sind vom Typ bool, somit lässt sich der Erfolg des Befehls direkt in einer If-Abfrage prüfen. Bei Übertragungen muss neben den Dateien außerdem der Übertragungsmodus festlegen. In der Regel ist dies FTP_ASCII für Text- und Quelltextdateien. Gerade bei verschlüsselten Daten, ausführbaren Dateien oder gepackten Daten muss jedoch FTP_BINARY verwendet werden.

Beispielcode

Zum Abschluss dieses Artikels hier noch ein kleines Beispielprogramm:

$cid = ftp_connect("ftp.host.de");
if(!$cid) { die("Verbindungsfehler!"); }
 
$login = ftp_login($cid, $user, $passwort);
if(!$login) { die("Login Error!"); }
 
//In Verzeichnis "upload" wechseln
if(!ftp_chdir($cid, "upload")) { die("Verzeichniswechsel fehlgeschlagen!"); }
 
//Datei "myfile.txt" herrunterladen, hierbei liegt "myfile.txt" auf dem FTP Server im
//Verzeichnis "upload" und wird in das gleiche Verzeichnis gespeichert, aus dem 
//dieses FTP Skript aufgerufen wird. Wichtig ist hierbei, dass PHP Schreibrechte
//für das Verzeichnis hat, indem das FTP Skript liegt.
if(ftp_get($cid, "myfile.txt", "myfile.txt", FTP_ASCII))
{
    echo "Übertragung erfolgreich!";
}
else
{
   echo "Übertragungsfehler!";
}
 
//Verbindung trennen
ftp_close($cid);
echo "FTP Verbindung geschlossen!";
Be Sociable, Share!

Kommentare

Pingback von Remote File Inclusion (RFI) – Angriffe auf PHP Sicherheitslücken – PHP Maniac – Das PHP Blog
Datum 9. Mai 2009 um 17:27 Uhr

[…] verwendet werden, um Informationen über den Host zu sammeln. Auch der Versand von Emails oder ein Aufbau von FTP-Verbindungen ist denkbar, da diese Funktionen auf fast allen Hostern aktiviert […]

Pingback von MySQL Datenbanken mit Backupskript sichern – PHP Maniac – Das PHP Blog
Datum 13. Mai 2009 um 23:19 Uhr

[…] aufgerufen, so erstellt es einen Dump der Datenbank, welcher dann z.B. per Email oder auf einen externen FTP Server übertragen werden kann. In keinem Fall sollten die Backups allerdings auf dem Server direkt […]

Schreibe einen Kommentar