W3docs

closedir()

Die PHP-Funktion closedir() gibt Systemressourcen frei, die einem Verzeichnis-Handle zugeordnet sind, und verhindert so Speicherlecks.

Einführung

Die Funktion closedir in PHP ist eine nützliche Funktion, die dabei hilft, die Systemressourcen freizugeben, die dem Verzeichnis-Stream zugewiesen wurden. Diese Funktion ist unverzichtbar, um Speicherlecks zu verhindern und sicherzustellen, dass Ihr Code reibungslos läuft. Es ist jedoch wichtig, die korrekte Verwendung dieser Funktion zu verstehen, um unerwartetes Verhalten in Ihrem Code zu vermeiden.

Die closedir-Funktion verstehen

Die Funktion closedir() schließt ein Verzeichnis-Handle, das zuvor mit opendir() geöffnet wurde. Sobald das Handle geschlossen ist, können Sie mit readdir() keine Einträge mehr daraus lesen, bis Sie das Verzeichnis erneut öffnen.

Die Syntax der PHP-Funktion closedir()

closedir(resource $dir_handle): void
  • $dir_handle — das von opendir() zurückgegebene Verzeichnis-Handle. Dieser Parameter ist optional: Wird er weggelassen, schließt PHP das zuletzt von opendir() geöffnete Verzeichnis-Handle.

Die Funktion gibt keinen Wert zurück (void). Sie gibt lediglich die zugrunde liegende Systemressource frei, sodass es nichts in einer Variable zu speichern gibt.

Ein Verzeichnis-Handle schließen

Wenn Sie mit einer großen Anzahl von Dateien arbeiten, ist es wichtig, das Verzeichnis-Handle zu schließen, um die Systemressourcen freizugeben. Wenn Sie das Verzeichnis-Handle nicht schließen, verbraucht Ihr Code immer mehr Speicher, was letztendlich zu einer Erschöpfung der Ressourcen führen kann.

Um ein Verzeichnis-Handle zu schließen, müssen Sie die Funktion closedir verwenden. Die Funktion nimmt einen einzigen Parameter entgegen, der eine Ressource darstellt, die das zu schließende Verzeichnis-Handle repräsentiert.

Ein typischer Arbeitsablauf ist: Verzeichnis öffnen, Einträge lesen, dann das Handle schließen. Hier ein vollständiges, ausführbares Beispiel, das das aktuelle Verzeichnis auflistet und das Handle stets schließt:

Beispiel der Funktion closedir() in PHP

<?php

$dir_handle = opendir('.');

if ($dir_handle !== false) {
    while (($entry = readdir($dir_handle)) !== false) {
        echo $entry . "\n";
    }
    closedir($dir_handle);
}

Die Ausführung auf einem Verzeichnis, das index.php und style.css enthält, gibt etwa folgendes aus:

.
..
index.php
style.css

Wir öffnen zunächst das Verzeichnis mit opendir(), lesen jeden Eintrag mit readdir() in einer Schleife und geben das Handle schließlich mit closedir() frei.

Das Handle immer mit try...finally schließen

Wenn der Code, der die Einträge verarbeitet, eine Ausnahme auslösen kann, umschließen Sie ihn mit einem try...finally-Block, damit das Handle auch dann geschlossen wird, wenn etwas schiefläuft:

<?php

$dir_handle = opendir('/path/to/directory');

if ($dir_handle !== false) {
    try {
        // Do something with the directory handle that might throw
        while (($entry = readdir($dir_handle)) !== false) {
            // process $entry
        }
    } finally {
        closedir($dir_handle);
    }
}

Der finally-Block wird ausgeführt, egal ob die Schleife normal endet oder eine Ausnahme ausgelöst wird, und garantiert so die Freigabe der Ressource.

Häufige Fehler mit closedir

Ein häufiger Fehler beim Umgang mit closedir ist der Versuch, ein Verzeichnis-Handle zweimal zu schließen. Sobald ein Verzeichnis-Handle geschlossen wurde, kann es nicht erneut geschlossen werden. Der Versuch, dies zu tun, löst eine Warnung aus.

Ein weiterer häufiger Fehler ist, nicht zu prüfen, ob das Verzeichnis-Handle gültig ist, bevor es geschlossen wird. opendir() gibt bei einem Fehler false zurück, daher sollten Sie immer sicherstellen, dass das Handle nicht false ist (wie in den obigen Beispielen), bevor Sie es an closedir() übergeben. Das Übergeben eines ungültigen Handles löst je nach PHP-Version einen TypeError oder eine Warnung aus.

Ein dritter Fallstrick ist die Verwechslung, dass das Schließen des Handles das Verzeichnis nicht löscht oder verändert — es gibt lediglich die Ressource frei, die zum Iterieren verwendet wurde. Die Dateien auf der Festplatte bleiben unberührt.

Verwandte Funktionen

  • opendir() — öffnet ein Verzeichnis-Handle zum Lesen.
  • readdir() — liest den nächsten Eintrag aus einem geöffneten Verzeichnis-Handle.
  • rewinddir() — setzt das Handle zurück auf den Anfang des Verzeichnisses.
  • scandir() — gibt alle Verzeichniseinträge als array in einem einzigen Aufruf zurück (kein manuelles Handle zu schließen).

Fazit

Die Funktion closedir() ist unverzichtbar, um die einem Verzeichnis-Stream zugewiesenen Systemressourcen freizugeben. Durch die korrekte Verwendung — indem die Gültigkeit des Handles überprüft und Operationen in einem try...finally-Block gekapselt werden — lassen sich Warnungen und Speicherlecks vermeiden. Die Einhaltung dieser Richtlinien stellt sicher, dass Ihr PHP-Code effizient und zuverlässig läuft.

Übung

Übung
Was macht die PHP-Funktion closedir()?
Was macht die PHP-Funktion closedir()?
Was this page helpful?