Start · Sprachen · PHP · Referenz · ftp_put

ftp_put

Funktion

Lädt eine lokale Datei auf einen FTP-Server hoch und speichert sie unter dem angegebenen Remote-Pfad.

seit PHP 4.0.0 Kategorie: io

Signatur

ftp_put(FTP\Connection $ftp, string $remote_filename, string $local_filename, int $mode = FTP_BINARY, int $offset = 0): bool

Beschreibung

ftp_put() überträgt eine Datei vom lokalen Dateisystem auf einen FTP-Server. Die Verbindung muss zuvor mit ftp_connect() und ftp_login() aufgebaut worden sein. Der Rückgabewert gibt an, ob der Upload erfolgreich abgeschlossen wurde.

Der Parameter $mode bestimmt, ob die Datei im Binär- oder ASCII-Modus übertragen wird. Für Textdateien (z. B. HTML, CSV) kann FTP_ASCII verwendet werden, wobei Zeilenenden automatisch konvertiert werden. Für alle anderen Dateien (Bilder, Archive, ausführbare Dateien usw.) sollte stets FTP_BINARY genutzt werden, um Datenverlust zu vermeiden.

Mit dem Parameter $offset lässt sich ein unterbrochener Upload an einer bestimmten Byte-Position fortsetzen (Resume-Funktion). Für einen frischen Upload bleibt dieser Wert auf 0.

Soll der Upload nicht-blockierend ablaufen (also ohne dass das PHP-Skript wartet), kann alternativ ftp_nb_put() eingesetzt werden.

Parameter

Name Typ Default Beschreibung
$ftp Pflicht FTP\Connection Eine aktive FTP-Verbindungsressource, die mit ftp_connect() erstellt wurde.
$remote_filename Pflicht string Der Zielpfad auf dem FTP-Server, unter dem die Datei gespeichert werden soll (z. B. /public_html/bild.jpg).
$local_filename Pflicht string Der Pfad zur lokalen Datei, die hochgeladen werden soll (z. B. /var/www/uploads/bild.jpg).
$mode int FTP_BINARY Übertragungsmodus: FTP_BINARY (Standard, für Binärdateien) oder FTP_ASCII (für reine Textdateien mit automatischer Zeilenenden-Konvertierung).
$offset int 0 Byte-Offset, ab dem der Upload beginnen soll. Nützlich zum Fortsetzen eines abgebrochenen Uploads. Standardmäßig 0 für einen vollständigen Upload.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. fehlende Schreibrechte auf dem Server, Verbindungsproblem oder nicht vorhandene lokale Datei).

Beispiele

Einfacher Datei-Upload auf einen FTP-Server

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

if (!ftp_login($ftp, 'benutzername', 'geheimespasswort')) {
    ftp_close($ftp);
    die('FTP-Login fehlgeschlagen.');
}

$lokal  = '/var/www/html/bilder/foto.jpg';
$remote = '/public_html/bilder/foto.jpg';

if (ftp_put($ftp, $remote, $lokal, FTP_BINARY)) {
    echo 'Datei erfolgreich hochgeladen.';
} else {
    echo 'Upload fehlgeschlagen.';
}

ftp_close($ftp);
Datei erfolgreich hochgeladen.

Unterbrochenen Upload fortsetzen (Resume)

<?php
$ftp = ftp_connect('ftp.example.com');
ftp_login($ftp, 'benutzername', 'geheimespasswort');

// Bereits übertragene Bytes auf dem Remote-Server ermitteln
$remoteGroesse = ftp_size($ftp, '/public_html/grosse-datei.zip');
$offset = ($remoteGroesse > 0) ? $remoteGroesse : 0;

$lokal  = '/var/www/tmp/grosse-datei.zip';
$remote = '/public_html/grosse-datei.zip';

if (ftp_put($ftp, $remote, $lokal, FTP_BINARY, $offset)) {
    echo "Upload ab Byte {$offset} erfolgreich fortgesetzt.";
} else {
    echo 'Fortsetzen des Uploads fehlgeschlagen.';
}

ftp_close($ftp);
Upload ab Byte 1048576 erfolgreich fortgesetzt.

// Wichtig · Fallstricke

Sicherheitshinweis: Speichere FTP-Zugangsdaten (Benutzername und Passwort) niemals direkt im Quellcode. Nutze stattdessen Umgebungsvariablen oder externe Konfigurationsdateien, die nicht im Webroot liegen.

Passiver Modus: Bei Verbindungsproblemen durch Firewalls oder NAT sollte ftp_pasv($ftp, true) nach dem Login aufgerufen werden, um den passiven Modus zu aktivieren.

Datenverlust durch falschen Modus: Das Verwenden von FTP_ASCII für Binärdateien (Bilder, ZIP-Archive, PDFs etc.) kann die Dateien korrumpieren, da Bytewerte, die Zeilenenden entsprechen, konvertiert werden.

Ab PHP 8.1 ist der Typ des $ftp-Parameters FTP\Connection statt der vorher verwendeten Ressource.