Start · Sprachen · PHP · Referenz · ftp_get

ftp_get

Funktion

Lädt eine Datei vom FTP-Server herunter und speichert sie unter dem angegebenen lokalen Pfad.

seit PHP 4.0.0 Kategorie: io

Signatur

ftp_get(FTP\Connection $ftp, string $local_filename, string $remote_filename, int $mode = FTP_BINARY, int $offset = 0): bool

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

Typ
bool
Beschreibung
Gibt 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);
Datei erfolgreich heruntergeladen.

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);
Download abgeschlossen. Fortgesetzt ab Byte: 1048576

// 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.