Start · Sprachen · PHP · Referenz · ftp_fput

ftp_fput

Funktion

Überträgt den Inhalt einer bereits geöffneten Datei-Ressource auf einen FTP-Server unter dem angegebenen Pfad.

seit PHP 4.0.0 Kategorie: io

Signatur

ftp_fput(FTP\Connection $ftp, string $remote_filename, resource $stream, int $mode = FTP_BINARY, int $offset = 0): bool

Beschreibung

ftp_fput() lädt eine lokal geöffnete Datei-Ressource (ein PHP-Stream-Handle) auf einen FTP-Server hoch. Im Gegensatz zu ftp_put(), das einen lokalen Dateipfad als String erwartet, arbeitet ftp_fput() direkt mit einem bereits geöffneten resource-Handle. Das ist besonders nützlich, wenn der Upload-Inhalt erst zur Laufzeit erzeugt wird (z. B. aus einem temporären Stream oder einem php://memory-Stream) und kein physisches Datei-Zwischenspeichern gewünscht ist.

Der Parameter $mode bestimmt den Übertragungsmodus: FTP_BINARY für binäre Dateien (Bilder, Archive, PDFs usw.) und FTP_ASCII für Textdateien, bei denen Zeilenenden plattformspezifisch konvertiert werden. Im Zweifel ist FTP_BINARY die sicherere Wahl, da keine unerwünschten Konvertierungen stattfinden.

Über den optionalen Parameter $offset lässt sich der Übertragung an einer bestimmten Byte-Position im Remote-File fortsetzen (Resume-Upload). Dies setzt voraus, dass der FTP-Server das Fortsetzen von Uploads unterstützt.

Vor der Nutzung von ftp_fput() muss eine aktive FTP-Verbindung mit ftp_connect() und ftp_login() hergestellt worden sein. Für verschlüsselte Übertragungen sollte stattdessen ftp_ssl_connect() verwendet werden.

Parameter

Name Typ Default Beschreibung
$ftp Pflicht FTP\Connection Eine aktive FTP-Verbindungsinstanz, wie sie von ftp_connect() oder ftp_ssl_connect() zurückgegeben wird.
$remote_filename Pflicht string Der vollständige Pfad (inkl. Dateiname) auf dem FTP-Server, unter dem die Datei gespeichert werden soll.
$stream Pflicht resource Ein bereits geöffnetes, lesbares Stream-Handle (z. B. von fopen()). Der Stream wird ab der aktuellen Position gelesen.
$mode int FTP_BINARY Der Übertragungsmodus: FTP_BINARY für binäre Daten oder FTP_ASCII für Textdaten mit automatischer Zeilenenden-Konvertierung.
$offset int 0 Die Byte-Position auf dem Remote-Server, ab der der Upload fortgesetzt werden soll. Standard ist 0 (Neustart).

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. fehlende Schreibrechte, Verbindungsabbruch oder ungültigem Stream-Handle).

Beispiele

Einfacher Upload einer lokalen Datei via Stream

<?php
// FTP-Verbindung herstellen
$ftp = ftp_connect('ftp.example.com');
if (!$ftp) {
    die('Verbindung zum FTP-Server fehlgeschlagen.');
}

// Einloggen
if (!ftp_login($ftp, 'benutzername', 'geheimes_passwort')) {
    die('FTP-Login fehlgeschlagen.');
}

// Lokale Datei öffnen
$handle = fopen('/var/www/uploads/bericht.pdf', 'rb');
if (!$handle) {
    die('Lokale Datei konnte nicht geöffnet werden.');
}

// Datei auf den FTP-Server übertragen
if (ftp_fput($ftp, '/public_html/berichte/bericht.pdf', $handle, FTP_BINARY)) {
    echo 'Datei erfolgreich hochgeladen.';
} else {
    echo 'Fehler beim Upload.';
}

fclose($handle);
ftp_close($ftp);
Datei erfolgreich hochgeladen.

Upload eines dynamisch erzeugten Inhalts aus einem Memory-Stream

<?php
// FTP-Verbindung herstellen und einloggen
$ftp = ftp_connect('ftp.example.com');
ftp_login($ftp, 'benutzername', 'geheimes_passwort');

// Inhalt dynamisch in einen Memory-Stream schreiben
$stream = fopen('php://memory', 'r+');
fwrite($stream, "Name;Alter\nAlice;30\nBob;25\n");
rewind($stream); // Stream-Zeiger auf Anfang setzen

// Als Textdatei im ASCII-Modus hochladen
if (ftp_fput($ftp, '/public_html/daten/export.csv', $stream, FTP_ASCII)) {
    echo 'CSV erfolgreich auf den FTP-Server übertragen.';
} else {
    echo 'Upload fehlgeschlagen.';
}

fclose($stream);
ftp_close($ftp);
CSV erfolgreich auf den FTP-Server übertragen.

// Wichtig · Fallstricke

Passiver Modus: Bei Verbindungsproblemen hinter Firewalls empfiehlt sich der Aufruf von ftp_pasv($ftp, true) vor dem Upload, um den passiven FTP-Modus zu aktivieren.

Stream-Position: Der Stream wird ab der aktuellen Zeiger-Position gelesen. Falls der Stream zuvor beschrieben wurde, muss er zuvor mit rewind() zurückgesetzt werden, andernfalls wird ein leerer oder unvollständiger Inhalt übertragen.

Sicherheit: FTP überträgt Zugangsdaten und Daten unverschlüsselt. Für sicherheitskritische Übertragungen sollte ftp_ssl_connect() genutzt oder auf SFTP (z. B. via ssh2-Extension) gewechselt werden.

PHP 8.1: Ab PHP 8.1 ist der Rückgabewert von ftp_connect() kein resource mehr, sondern ein FTP\Connection-Objekt.