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