Start · Sprachen · PHP · Referenz · ftp://

ftp://

Funktion

Der Stream-Wrapper <code>ftp://</code> ermöglicht den transparenten Zugriff auf Dateien und Verzeichnisse über das FTP- bzw. FTPS-Protokoll.

seit PHP 4.0.0 Kategorie: misc

Signatur

ftp://[user[:password]@]host[:port]/path

Beschreibung

Der ftp://-Wrapper ist ein in PHP eingebauter Stream-Wrapper, der es ermöglicht, auf entfernte Dateien und Verzeichnisse über das File Transfer Protocol (FTP) zuzugreifen, als wären es lokale Dateipfade. Er kann mit den meisten Dateifunktionen verwendet werden, die einen Stream-Kontext akzeptieren, z. B. fopen(), file_get_contents(), file_put_contents(), copy() oder rename().

Für verschlüsselte Verbindungen steht der Wrapper ftps:// zur Verfügung, der explizites FTPS (FTP über SSL/TLS) nutzt. Der Wrapper unterstützt sowohl lesenden als auch schreibenden Zugriff, jedoch keine gleichzeitigen Lese- und Schreiboperationen auf derselben Verbindung. Beim Schreiben wird die Datei vollständig übertragen, eine teilweise Aktualisierung (Seek) ist nicht möglich.

Die URL-Syntax lautet: ftp://benutzer:passwort@host:port/pfad/zur/datei.txt. Benutzername, Passwort und Port sind optional; wird kein Port angegeben, wird der Standard-FTP-Port 21 verwendet. Sonderzeichen in Benutzername oder Passwort müssen URL-kodiert werden.

Über einen Stream-Kontext (stream_context_create()) lassen sich zusätzliche Optionen konfigurieren, z. B. der passive Modus (ftp.passive), der für Verbindungen hinter einer Firewall oder NAT häufig erforderlich ist.

Parameter

Name Typ Default Beschreibung
$user string anonymous FTP-Benutzername. Wird er weggelassen, wird anonymous verwendet.
$password string Passwort für den angegebenen Benutzer. Sonderzeichen müssen URL-kodiert sein (z. B. %40 für @).
$host Pflicht string Hostname oder IP-Adresse des FTP-Servers.
$port int 21 TCP-Port des FTP-Servers. Standard ist Port 21.
$path Pflicht string Absoluter Pfad zur Datei oder zum Verzeichnis auf dem FTP-Server.

Rückgabewert

Typ

Beispiele

Datei von einem FTP-Server lesen

<?php
// Dateiinhalt von einem FTP-Server abrufen (passiver Modus)
$context = stream_context_create([
    'ftp' => [
        'overwrite' => true,
    ]
]);

$url = 'ftp://user:geheim@ftp.example.com/pub/daten.txt';

$inhalt = file_get_contents($url, false, $context);

if ($inhalt === false) {
    echo 'Fehler beim Lesen der Datei.';
} else {
    echo $inhalt;
}
(Inhalt der Datei daten.txt)

Datei auf einen FTP-Server hochladen (passiver Modus)

<?php
// Datei auf FTP-Server schreiben mit passivem Modus
$context = stream_context_create([
    'ftp' => [
        'overwrite' => true,
    ]
]);

$ziel  = 'ftp://user:geheim@ftp.example.com/upload/bericht.txt';
$daten = 'Dies ist der Inhalt des Berichts.';

$bytes = file_put_contents($ziel, $daten, 0, $context);

if ($bytes === false) {
    echo 'Upload fehlgeschlagen.';
} else {
    echo "Erfolgreich {$bytes} Bytes hochgeladen.";
}
Erfolgreich 33 Bytes hochgeladen.

Verzeichnislisting über FTP

<?php
// Verzeichnisinhalte eines FTP-Servers auflisten
$dateien = scandir('ftp://user:geheim@ftp.example.com/pub/');

if ($dateien === false) {
    echo 'Konnte Verzeichnis nicht lesen.';
} else {
    foreach ($dateien as $datei) {
        echo $datei . PHP_EOL;
    }
}
. .. daten.txt bericht.pdf

// Wichtig · Fallstricke

Sicherheit: Benutzername und Passwort werden im Klartext in der URL angegeben. Vermeiden Sie es, diese Informationen in Quelltexten fest zu kodieren. Verwenden Sie stattdessen Umgebungsvariablen oder externe Konfigurationsdateien, die nicht im Web-Root liegen.

Passiver Modus: In den meisten Umgebungen hinter Firewalls oder NAT ist der passive Modus erforderlich. Er kann über den Stream-Kontext mit 'ftp' => ['passive' => true] aktiviert werden. Ohne passiven Modus kann die Verbindung scheitern.

allow_url_fopen: Der Wrapper setzt voraus, dass die PHP-INI-Direktive allow_url_fopen auf On gesetzt ist. Wenn sie deaktiviert ist, schlägt jeder Zugriff über ftp:// fehl. Aus Sicherheitsgründen ist diese Direktive auf manchen Systemen deaktiviert.

Alternativen: Für komplexere FTP-Operationen (z. B. Listing, Umbenennen, Löschen, aktive Steuerung) empfiehlt sich die Verwendung der ftp_*-Funktionen oder der FTP-Erweiterung direkt. Der ftp://-Wrapper ist für einfache Lese-/Schreibzugriffe konzipiert.