Signatur
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
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;
}
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.";
}
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;
}
}
// 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.