W3docs

rmdir()

Die PHP-Funktion rmdir() entfernt ein Verzeichnis. Dieser Artikel erklärt Syntax, Parameter und Beispiele zur Verwendung von rmdir().

Einführung

In PHP wird die Funktion rmdir() verwendet, um ein Verzeichnis zu entfernen. Sie ist eine nützliche Funktion zur Verwaltung des Dateisystems. In diesem Artikel behandeln wir alles Wissenswerte über die Funktion rmdir(), einschließlich ihrer Syntax, Parameter und Beispiele zur Verwendung.

Die Funktion rmdir() verstehen

Die Funktion rmdir() entfernt ein Verzeichnis aus dem Dateisystem. Es gibt eine wichtige Regel zu beachten: rmdir() löscht nur leere Verzeichnisse. Enthält das Verzeichnis noch Dateien oder Unterverzeichnisse, schlägt der Aufruf fehl und PHP gibt eine E_WARNING-Meldung aus.

Dies ist by design — es verhindert, dass Sie mit einem einzigen fehlerhaften Aufruf einen ganzen Verzeichnisbaum löschen. Um ein Verzeichnis mit Inhalt zu löschen, müssen Sie zuerst den Inhalt entfernen (siehe Beispiel 2 unten).

Weitere Situationen, die dazu führen, dass rmdir() fehlschlägt und false zurückgibt:

  • Der Pfad existiert nicht oder ist eine Datei statt eines Verzeichnisses.
  • Der Benutzer des Skripts hat keine Schreib- oder Ausführungsberechtigung für das übergeordnete Verzeichnis.
  • Auf einigen Systemen ist das Verzeichnis das aktuelle Arbeitsverzeichnis des Prozesses oder wird anderweitig verwendet.

Verwandte Funktionen, die häufig zusammen mit rmdir() eingesetzt werden: mkdir() zum Erstellen von Verzeichnissen, is_dir() zum Prüfen, ob ein Pfad ein Verzeichnis ist, scandir() zum Auflisten des Inhalts und unlink() zum Löschen einzelner Dateien darin.

Syntax der Funktion rmdir()

rmdir(string $directory, ?resource $context = null): bool
ParameterBeschreibung
$directoryErforderlich. Pfad des zu entfernenden Verzeichnisses.
$contextOptional. Eine Stream-Kontext-Ressource, die hauptsächlich bei benutzerdefinierten Stream-Wrappern verwendet wird. Für lokale Dateien selten benötigt.

Die Funktion gibt bei Erfolg true und bei Misserfolg false zurück.

Hinweis zum Caching: PHP speichert die Ergebnisse von Dateistatusüberprüfungen zwischen. Nach dem Erstellen oder Löschen von Verzeichnissen in einer engen Schleife sollten Sie clearstatcache() aufrufen, bevor Sie denselben Pfad erneut mit is_dir() oder file_exists() prüfen, da Sie sonst möglicherweise ein veraltetes Ergebnis erhalten.

Beispiele zur Verwendung von rmdir()

Beispiel 1: Ein Verzeichnis entfernen

Dieses Beispiel prüft mit is_dir(), ob der Pfad existiert, bevor versucht wird, ihn zu entfernen, und gibt an, ob der Aufruf erfolgreich war:

<?php

$directory = 'example_directory';

if (is_dir($directory)) {
    if (rmdir($directory)) {
        echo "Directory removed successfully.";
    } else {
        echo "Failed to remove directory. It may not be empty or lack permissions.";
    }
} else {
    echo "Directory does not exist.";
}

Wenn example_directory existiert und leer ist, gibt dies Directory removed successfully. aus. Die Prüfung mit is_dir() ermöglicht es, die Warnung zu vermeiden, die rmdir() andernfalls für einen nicht vorhandenen Pfad ausgeben würde.

Beispiel 2: Ein nicht leeres Verzeichnis entfernen

Da rmdir() ein Verzeichnis mit Inhalt nicht löscht, müssen Sie es zuerst leeren. Die idiomatische Lösung ist ein rekursiver Helfer, der den Baum durchläuft, jede Datei mit unlink() löscht und in jedes Unterverzeichnis rekursiert, bevor schließlich rmdir() auf dem nun leeren Verzeichnis aufgerufen wird:

<?php

function removeDirectory($dir) {
    if (!is_dir($dir)) {
        return false;
    }
    $files = array_diff(scandir($dir), ['.', '..']);
    foreach ($files as $file) {
        $path = $dir . DIRECTORY_SEPARATOR . $file;
        is_dir($path) ? removeDirectory($path) : unlink($path);
    }
    return rmdir($dir);
}

removeDirectory('example_directory');

Hier entfernt array_diff(scandir($dir), ['.', '..']) die speziellen Einträge . und .., die von scandir() zurückgegeben werden, und DIRECTORY_SEPARATOR erstellt Pfade, die sowohl unter Windows als auch unter Unix-ähnlichen Systemen funktionieren. Die Funktion gibt das Ergebnis des abschließenden rmdir() zurück, sodass Sie es auf Erfolg prüfen können.

Tipp: Rekursives Löschen ist destruktiv und kann nicht rückgängig gemacht werden. Validieren Sie den Pfad, bevor Sie die Funktion aufrufen (lehnen Sie z. B. einen leeren String oder das Dateisystemwurzelverzeichnis ab), damit ein Fehler nicht mehr als beabsichtigt löscht.

Häufige Fehler und Fallstricke

  • Versuch, ein nicht leeres Verzeichnis zu entfernen. Dies ist die häufigste Fehlerursache. Leeren Sie das Verzeichnis zuerst oder verwenden Sie den rekursiven Helfer oben.
  • Rückgabewert ignorieren. rmdir() gibt bei den meisten Fehlern false zurück, anstatt eine Ausnahme zu werfen (es gibt eine Warnung aus). Prüfen Sie in wichtigem Code immer den booleschen Rückgabewert.
  • Warnung mit @ unterdrücken. @rmdir($dir) versteckt die Meldung, aber nicht den Fehler. Bevorzugen Sie stattdessen die Prüfung von is_dir() und des Rückgabewerts.
  • Berechtigungen vergessen. Das Löschen eines Verzeichnisses erfordert Schreib- und Ausführungsberechtigungen für das übergeordnete Verzeichnis, nicht für das Verzeichnis selbst.

Fazit

Die Funktion rmdir() bietet eine unkomplizierte Möglichkeit, leere Verzeichnisse in PHP zu entfernen. Um ein Verzeichnis mit Inhalt zu löschen, muss es zuerst geleert werden — in der Regel mit einem rekursiven Helfer, der scandir() und unlink() kombiniert. Prüfen Sie immer den Rückgabewert und sichern Sie destruktive rekursive Löschvorgänge mit einer Pfadprüfung ab.

Um tiefer einzusteigen, erkunden Sie die verwandten Verzeichnisfunktionen: mkdir(), is_dir(), scandir() und rename().

Übungen

Übung
Wozu dient die Funktion rmdir() in PHP?
Wozu dient die Funktion rmdir() in PHP?
Was this page helpful?