Signatur
Beschreibung
ftp_rmdir() entfernt ein Verzeichnis auf dem remote FTP-Server. Das Verzeichnis muss vollständig leer sein – also weder Dateien noch Unterverzeichnisse enthalten –, damit der Löschvorgang erfolgreich ist. Andernfalls schlägt die Funktion fehl und gibt false zurück.
Der Pfad zum Verzeichnis kann absolut oder relativ zum aktuellen Arbeitsverzeichnis der FTP-Verbindung angegeben werden. Das aktuelle Verzeichnis lässt sich mit ftp_pwd() ermitteln und mit ftp_chdir() wechseln.
Soll ein Verzeichnis rekursiv (also inklusive aller Inhalte) gelöscht werden, müssen zunächst alle enthaltenen Dateien mit ftp_delete() und Unterverzeichnisse mit weiteren ftp_rmdir()-Aufrufen entfernt werden, da PHP dafür keine eingebaute Hilfsfunktion bietet.
Ab PHP 8.1 ist der erste Parameter ein FTP\Connection-Objekt statt einer Ressource vom Typ resource.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ftp Pflicht | FTP\Connection | Eine aktive FTP-Verbindung, die mit ftp_connect() oder ftp_ssl_connect() geöffnet wurde. |
|
| $directory Pflicht | string | Der Pfad des zu löschenden Verzeichnisses auf dem FTP-Server. Kann absolut (z. B. /var/www/tmp) oder relativ zum aktuellen Arbeitsverzeichnis angegeben werden. |
Rückgabewert
true zurück, wenn das Verzeichnis erfolgreich gelöscht wurde, andernfalls false – z. B. wenn das Verzeichnis nicht leer ist, nicht existiert oder die nötigen Berechtigungen fehlen.Beispiele
Leeres Verzeichnis auf FTP-Server löschen
<?php
$ftp = ftp_connect('ftp.example.com');
if (!$ftp) {
die('Verbindung fehlgeschlagen.');
}
if (!ftp_login($ftp, 'benutzername', 'passwort')) {
die('Anmeldung fehlgeschlagen.');
}
$verzeichnis = '/uploads/tmp';
if (ftp_rmdir($ftp, $verzeichnis)) {
echo "Verzeichnis '$verzeichnis' wurde erfolgreich gelöscht.";
} else {
echo "Verzeichnis '$verzeichnis' konnte nicht gelöscht werden.";
}
ftp_close($ftp);
Verzeichnis rekursiv leeren und löschen
<?php
function ftp_rmdir_recursive(FTP\Connection $ftp, string $dir): bool {
$liste = ftp_nlist($ftp, $dir);
if ($liste === false) {
return false;
}
foreach ($liste as $eintrag) {
// Punkte ignorieren
if (in_array(basename($eintrag), ['.', '..'], true)) {
continue;
}
// Prüfen ob Unterverzeichnis
$raw = ftp_rawlist($ftp, $eintrag);
if ($raw && isset($raw[0]) && $raw[0][0] === 'd') {
ftp_rmdir_recursive($ftp, $eintrag);
} else {
ftp_delete($ftp, $eintrag);
}
}
return ftp_rmdir($ftp, $dir);
}
$ftp = ftp_connect('ftp.example.com');
ftp_login($ftp, 'benutzername', 'passwort');
if (ftp_rmdir_recursive($ftp, '/uploads/alteDaten')) {
echo "Verzeichnis rekursiv gelöscht.";
} else {
echo "Löschen fehlgeschlagen.";
}
ftp_close($ftp);
// Wichtig · Fallstricke
Berechtigungen: Der auf dem FTP-Server angemeldete Benutzer benötigt ausreichende Schreibrechte auf das übergeordnete Verzeichnis, um das Unterverzeichnis löschen zu dürfen.
Nicht leer: Enthält das Verzeichnis noch Dateien oder Unterordner, gibt ftp_rmdir() false zurück, ohne eine Ausnahme zu werfen. Prüfe den Rückgabewert stets explizit.
Sicherheit: Achte darauf, dass der übergebene Pfad validiert und saniert wird, bevor er von Benutzereingaben stammt, um unbeabsichtigtes Löschen kritischer Verzeichnisse (Path Traversal) zu verhindern.
PHP 8.1: Ab PHP 8.1 ist das erste Argument ein FTP\Connection-Objekt; älterer Code mit resource-Typ erzeugt einen Deprecation-Hinweis.