Signatur
Beschreibung
PHP ermöglicht es, FTP-Verbindungen über den Wrapper ftp:// bzw. ftps:// mit Stream-Kontexten zu konfigurieren. Die FTP-Kontextoptionen werden als assoziatives Array unter dem Schlüssel ftp an stream_context_create() übergeben und beeinflussen, wie der FTP-Wrapper eine Verbindung aufbaut und Daten überträgt.
Die wichtigste Option ist overwrite: Sie legt fest, ob eine bereits auf dem Server existierende Datei beim Schreiben überschrieben werden darf. Ohne diese Option schlägt ein Schreibvorgang auf eine vorhandene Datei fehl. Die Option resume_pos erlaubt es, einen Dateitransfer an einer bestimmten Byte-Position fortzusetzen – nützlich bei unterbrochenen Downloads oder Uploads. Mit proxy kann ein FTP-Proxy angegeben werden, über den die Verbindung geroutet wird.
Kontextoptionen sind der empfohlene Weg, FTP-Verbindungen über Dateioperationen wie file_get_contents(), fopen() oder copy() mit dem FTP-Wrapper zu konfigurieren – insbesondere wenn keine vollständige FTP-Erweiterung (ftp_connect() etc.) genutzt werden soll.
- overwrite (bool): Überschreiben bestehender Remote-Dateien erlauben. Standard:
false. - resume_pos (int): Byte-Offset, ab dem der Transfer fortgesetzt wird. Standard:
0. - proxy (string): URL eines FTP-Proxys, z. B.
tcp://squid.example.com:8000.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $options Pflicht | array | Assoziatives Array mit Stream-Kontextoptionen. FTP-Optionen werden unter dem Schlüssel ftp als weiteres assoziatives Array übergeben, z. B. ['ftp' => ['overwrite' => true]]. |
Rückgabewert
fopen(), file_get_contents() oder copy() übergeben werden kann.Beispiele
Datei via FTP-Wrapper mit Überschreiben hochladen
<?php
// Kontext erstellen, der das Überschreiben bestehender Dateien erlaubt
$context = stream_context_create([
'ftp' => [
'overwrite' => true,
]
]);
$localContent = 'Hallo FTP-Welt!';
$ziel = 'ftp://benutzer:passwort@ftp.example.com/pfad/datei.txt';
$erfolg = file_put_contents($ziel, $localContent, 0, $context);
if ($erfolg !== false) {
echo "Datei erfolgreich hochgeladen: {$erfolg} Bytes";
} else {
echo "Upload fehlgeschlagen.";
}
Unterbrochenen Download ab einer bestimmten Byte-Position fortsetzen
<?php
// Bereits heruntergeladene Bytes ermitteln
$lokale_datei = '/tmp/grossedatei.zip';
$offset = file_exists($lokale_datei) ? filesize($lokale_datei) : 0;
// Kontext mit resume_pos setzen
$context = stream_context_create([
'ftp' => [
'resume_pos' => $offset,
]
]);
$quelle = 'ftp://benutzer:passwort@ftp.example.com/dateien/grossedatei.zip';
// Datei ab Offset lesen und an lokale Datei anhängen
$daten = file_get_contents($quelle, false, $context);
if ($daten !== false) {
file_put_contents($lokale_datei, $daten, FILE_APPEND);
echo "Download ab Byte {$offset} fortgesetzt. " . strlen($daten) . " Bytes empfangen.";
} else {
echo "Download fehlgeschlagen.";
}
FTP-Verbindung über einen Proxy
<?php
$context = stream_context_create([
'ftp' => [
'proxy' => 'tcp://proxy.example.com:8000',
'overwrite' => false,
]
]);
$inhalt = file_get_contents(
'ftp://benutzer:passwort@ftp.example.com/readme.txt',
false,
$context
);
if ($inhalt !== false) {
echo $inhalt;
} else {
echo "Fehler beim Lesen über Proxy.";
}
// Wichtig · Fallstricke
Sicherheitshinweis: FTP überträgt Benutzernamen und Passwörter standardmäßig im Klartext. Nutze wo möglich ftps:// (FTP über TLS/SSL), um die Verbindung zu verschlüsseln. Hardcodierte Zugangsdaten in URLs sollten vermieden werden – stattdessen sollten sie aus Konfigurationsdateien außerhalb des Web-Roots gelesen werden.
Einschränkung: Die Option proxy wird nicht von allen FTP-Servern und Proxys vollständig unterstützt. Die Verfügbarkeit hängt von der PHP-Konfiguration und den installierten Stream-Wrappern ab. Mit stream_get_wrappers() lässt sich prüfen, ob der FTP-Wrapper aktiv ist.
Passive vs. aktive Übertragung: Der FTP-Wrapper von PHP verwendet standardmäßig den passiven Modus. Eine direkte Kontrolle des Übertragungsmodus über Kontextoptionen ist nicht vorgesehen – dafür sollte die FTP-Erweiterung mit ftp_pasv() genutzt werden.