Start · Sprachen · PHP · Referenz · ftp_append

ftp_append

Funktion

Hängt den Inhalt einer lokalen Datei an eine bereits vorhandene Datei auf dem FTP-Server an.

seit PHP 7.2.0 Kategorie: io

Signatur

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

Beschreibung

ftp_append() überträgt den Inhalt einer lokalen Datei und fügt ihn am Ende einer bestehenden Datei auf dem FTP-Server hinzu (FTP-Kommando APPE). Im Gegensatz zu ftp_put(), das eine Datei überschreibt, wird hier der Inhalt angehängt, ohne den bestehenden Inhalt zu löschen.

Typische Einsatzgebiete sind das kontinuierliche Schreiben von Log-Dateien auf einem entfernten Server, das Zusammenführen von Datei-Teilen (Chunked-Uploads) oder das Ergänzen von CSV-Exportdateien auf einem FTP-Ziel.

Der Parameter $mode bestimmt, ob die Übertragung im Binär- (FTP_BINARY) oder im ASCII-Modus (FTP_ASCII) erfolgt. Für binäre Dateien (Bilder, Archive usw.) sollte stets FTP_BINARY verwendet werden. Im ASCII-Modus werden Zeilenenden automatisch konvertiert, was für reine Textdateien sinnvoll sein kann.

Existiert die Zieldatei auf dem Server noch nicht, legt ftp_append() sie neu an. Die Funktion setzt eine aktive FTP-Verbindung voraus, die z. B. mit ftp_connect() und ftp_login() aufgebaut wurde.

Parameter

Name Typ Default Beschreibung
$ftp Pflicht FTP\Connection Eine aktive FTP-Verbindungsinstanz, erzeugt durch ftp_connect() oder ftp_ssl_connect().
$remote_filename Pflicht string Der Pfad und Dateiname der Zieldatei auf dem FTP-Server, an die der Inhalt angehängt werden soll.
$local_filename Pflicht string Der Pfad zur lokalen Quelldatei, deren Inhalt übertragen und angehängt wird.
$mode int FTP_BINARY Übertragungsmodus: FTP_BINARY (Standard) für binäre Dateien oder FTP_ASCII für Textdateien mit automatischer Zeilenendenkonvertierung.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false wenn die Übertragung fehlschlägt – etwa weil die lokale Datei nicht lesbar ist, die Verbindung unterbrochen wurde oder der Server den APPE-Befehl ablehnt.

Beispiele

Log-Datei auf FTP-Server erweitern

<?php
// Verbindung aufbauen
$ftp = ftp_connect('ftp.example.com');
if ($ftp === false) {
    die('Verbindung fehlgeschlagen');
}

// Anmelden
if (!ftp_login($ftp, 'benutzer', 'geheimesPasswort')) {
    die('Anmeldung fehlgeschlagen');
}

// Lokale Log-Datei an Remote-Log anhängen
$localFile  = '/tmp/neues_log.txt';
$remoteFile = '/logs/server.log';

if (ftp_append($ftp, $remoteFile, $localFile, FTP_ASCII)) {
    echo 'Log-Daten erfolgreich angehängt.';
} else {
    echo 'Fehler beim Anhängen der Log-Daten.';
}

ftp_close($ftp);
Log-Daten erfolgreich angehängt.

Binäre Datei-Chunks zusammenführen

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

// Passiven Modus aktivieren (empfohlen hinter Firewalls)
ftp_pasv($ftp, true);

$remoteTarget = '/uploads/grosseDatei.bin';
$chunks = [
    '/tmp/chunk_001.bin',
    '/tmp/chunk_002.bin',
    '/tmp/chunk_003.bin',
];

foreach ($chunks as $chunk) {
    if (!ftp_append($ftp, $remoteTarget, $chunk, FTP_BINARY)) {
        echo "Fehler beim Hochladen von: $chunk\n";
        ftp_close($ftp);
        exit(1);
    }
    echo "Chunk hochgeladen: $chunk\n";
}

echo 'Alle Chunks erfolgreich zusammengeführt.';
ftp_close($ftp);
Chunk hochgeladen: /tmp/chunk_001.bin Chunk hochgeladen: /tmp/chunk_002.bin Chunk hochgeladen: /tmp/chunk_003.bin Alle Chunks erfolgreich zusammengeführt.

// Wichtig · Fallstricke

Verfügbarkeit: ftp_append() wurde erst in PHP 7.2.0 eingeführt. Für ältere PHP-Versionen gibt es keine direkte Entsprechung in der eingebauten FTP-Erweiterung.

Serverunterstützung: Nicht alle FTP-Server unterstützen den APPE-Befehl. Im Fehlerfall sollte geprüft werden, ob der Server diesen Befehl erlaubt.

Passiver Modus: In Umgebungen hinter NAT oder Firewalls empfiehlt es sich, vor dem Aufruf ftp_pasv($ftp, true) zu setzen, um Verbindungsprobleme zu vermeiden.

Sicherheit: Zugangsdaten (Benutzername und Passwort) sollten niemals im Klartext im Quellcode gespeichert werden. Verwende Umgebungsvariablen oder gesicherte Konfigurationsdateien. Für verschlüsselte Übertragungen sollte ftp_ssl_connect() statt ftp_connect() genutzt werden.