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