Start · Sprachen · PHP · Referenz · FTP context options

FTP context options

Funktion

FTP-Kontextoptionen steuern das Verhalten von FTP-Streams, die mit <code>ftp://</code> oder <code>ftps://</code> geöffnet werden.

seit PHP 5.0.0 Kategorie: misc

Signatur

stream_context_create(array $options)

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

Typ
resource
Beschreibung
Gibt eine Stream-Kontext-Ressource zurück, die an Stream-Funktionen wie 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.";
}
Datei erfolgreich hochgeladen: 15 Bytes

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.";
}
Download ab Byte 1048576 fortgesetzt. 2097152 Bytes empfangen.

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.