Signatur
Beschreibung
ftp_get() überträgt eine Datei von einem entfernten FTP-Server auf das lokale Dateisystem. Die Funktion benötigt eine aktive FTP-Verbindung, die zuvor mit ftp_connect() und ftp_login() aufgebaut wurde. Der Rückgabewert true zeigt an, dass die Übertragung erfolgreich abgeschlossen wurde.
Der Parameter $mode steuert, ob die Datei im Binärmodus (FTP_BINARY) oder im ASCII-Modus (FTP_ASCII) übertragen wird. Für Textdateien kann der ASCII-Modus sinnvoll sein, da er Zeilenenden automatisch an das Zielbetriebssystem anpasst. Für alle anderen Dateitypen (Bilder, Archive, ausführbare Dateien usw.) sollte stets FTP_BINARY verwendet werden, um Datenverlust zu vermeiden.
Mit dem optionalen Parameter $offset lässt sich ein Startpunkt innerhalb der Remote-Datei angeben, ab dem der Download beginnen soll. Dies ist nützlich, um unterbrochene Übertragungen fortzusetzen (Resume-Funktion). Der Wert gibt die Anzahl der zu überspringenden Bytes an.
Für sehr große Dateien oder nicht-blockierende Szenarien kann alternativ ftp_nb_get() verwendet werden, das den nicht-blockierenden Download unterstützt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ftp Pflicht | FTP\Connection | Eine aktive FTP-Verbindungsinstanz, wie sie von ftp_connect() zurückgegeben wird. |
|
| $local_filename Pflicht | string | Der lokale Dateipfad, unter dem die heruntergeladene Datei gespeichert werden soll. Existiert die Datei bereits, wird sie überschrieben. | |
| $remote_filename Pflicht | string | Der Pfad zur Datei auf dem FTP-Server, relativ zum aktuellen Arbeitsverzeichnis der FTP-Sitzung. | |
| $mode | int | FTP_BINARY | Übertragungsmodus: FTP_BINARY für binäre Dateien oder FTP_ASCII für Textdateien mit automatischer Zeilenenden-Konvertierung. |
| $offset | int | 0 | Startposition in Bytes innerhalb der Remote-Datei, ab der der Download beginnen soll. Nützlich zum Fortsetzen unterbrochener Übertragungen. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. Datei nicht gefunden, Verbindungsfehler oder fehlende Schreibrechte für die lokale Datei).Beispiele
Einfacher Datei-Download vom FTP-Server
<?php
$ftp = ftp_connect('ftp.example.com');
if ($ftp === false) {
die('Verbindung zum FTP-Server fehlgeschlagen.');
}
if (!ftp_login($ftp, 'benutzername', 'passwort')) {
die('FTP-Anmeldung fehlgeschlagen.');
}
$remote = '/public_html/daten/bericht.pdf';
$lokal = '/var/www/downloads/bericht.pdf';
if (ftp_get($ftp, $lokal, $remote, FTP_BINARY)) {
echo 'Datei erfolgreich heruntergeladen.';
} else {
echo 'Fehler beim Herunterladen der Datei.';
}
ftp_close($ftp);
Download fortsetzen (Resume) mit Offset
<?php
$ftp = ftp_connect('ftp.example.com');
ftp_login($ftp, 'benutzername', 'passwort');
// Passiver Modus für Verbindungen hinter einer Firewall
ftp_pasv($ftp, true);
$remote = '/uploads/grosse-datei.zip';
$lokal = '/tmp/grosse-datei.zip';
$bereitsGeladen = file_exists($lokal) ? filesize($lokal) : 0;
if (ftp_get($ftp, $lokal, $remote, FTP_BINARY, $bereitsGeladen)) {
echo "Download abgeschlossen. Fortgesetzt ab Byte: {$bereitsGeladen}";
} else {
echo 'Download fehlgeschlagen.';
}
ftp_close($ftp);
// Wichtig · Fallstricke
Sicherheitshinweis: Übertragen Sie niemals sensible Daten (Passwörter, persönliche Informationen) über eine unverschlüsselte FTP-Verbindung. Verwenden Sie stattdessen ftp_ssl_connect() für eine TLS-gesicherte Verbindung (FTPS) oder eine SFTP-Bibliothek wie phpseclib.
Schreibrechte: Das PHP-Prozess-Benutzerkonto muss Schreibrechte auf das Zielverzeichnis des lokalen Pfades besitzen, sonst schlägt die Funktion lautlos fehl.
Passiver Modus: Bei Verbindungen hinter NAT oder einer Firewall sollte vor dem Aufruf ftp_pasv($ftp, true) gesetzt werden, um Verbindungsprobleme zu vermeiden.
PHP 8.1: Ab PHP 8.1 ist der Rückgabetyp der FTP-Verbindung eine FTP\Connection-Instanz anstelle einer resource.