Moderne Methoden, um Verzeichnisse in PHP auszulesen
23.12.2020
Netzwerk Offline
Dein Netzwerk ist offline, deshalb laden wir die gesamte Seite aus dem Cache. Beachte: die Inhalte k├Ânnten veraltet sein!
F├╝r aktuelle Inhalte aktiviere bitte dein Internet!
Alter Browser
Hallo liebe Nutzer,
da wir als Coding-Plattform und Webentwickler ausschlie├člich auf aktuelle Technologien setzen, unterst├╝tzen wir keine veralteten Internetbrowser. Bitte schau dir doch ein paar der tollen Alternativen an, bestimmt findest du hier einen f├╝r dich passenden modernen Browser!

PHP Verzeichnisse einlesen bzw. auslesen

Inhaltsverzeichnis
[[TABLE OF CONTENTS]]
access_timeGesch├Ątzte Lesezeit ca. Minuten

PHP wurde, genau wie C oder C++, historisch sehr geprägt. Das bedeutet, es existiert im Internet viel veralteter Code, der gar nicht die Vorteile der neueren Versionen nutzt, so auch beim Einlesen von Verzeichnissen. Wenn man sich das Beispiel auf der offiziellen PHP Seite durchliest, dann wird zunächst ein Stream geöffnet, welcher dann nach und nach verarbeitet wird. Nicht nur, dass diese Methode keiner nutzen möchte, es entstehen auch schnell Fehler und Missverständnisse darüber, was der PHP Code überhaupt treibt. Es wäre schön, wenn es eine Funktion gäbe, welche mir die Ordner einfach nur noch ausgeben würde! Ich möchte dir deshalb nun drei Möglichkeiten zeigen, um ein Verzeichnis auszulesen.

Veraltet: readdir()

Diese Version ist nicht gut, da hier darauf plädiert wird, dass der Wert der Zeile nicht false ist, leere Strings in PHP sind jedoch false. Solltest du also eine leere Zeile haben, bricht diese das Skript ab.

if ($handle = opendir('/home/uvulpos/Desktop')) {
    while ($entry = readdir($handle)) {
        echo "$entry\n";
    }

    closedir($handle);
}

Umständlich: Filestreams API

Funktioniert noch, ist aber sehr umständlich und schlecht lesbar. Zudem ist die Arbeit mit Filestreams in PHP unlesbar und sehr umständlich.

if ($handle = opendir('/home/uvulpos/Desktop')) {
    while (false !== ($entry = readdir($handle))) {
          if ($file === ".." or $file === ".") continue;
        echo "$entry\n";
    }

    closedir($handle);
}

Bevorzugt: scandir()

Die Funktion scandir() gibt alle Verzeichnisse und Dateien innerhalb eines Pfades als Array zurück. Ich entferne hier . und .., da diese keine richtigen Verzeichnisse sind.

foreach (scandir("/home/uvulpos/Desktop") as $file) {
  if ($file === ".." or $file === ".") continue;

    echo "$file\n";
}

Tipp

Wenn du . und .. direkt aus dem Array Entfernen willst, das durch scandir erstellt wird, kann ich dir die Funktion array_diff empfehlen!

$files = array_diff(scandir('/home/uvulpos/Desktop'), ['.','..']);

Fazit

Viele Entwickler suchen im Internet immer nur nach der ersten Lösung und produzieren deswegen sehr schlecht lesbaren Code. Zudem ist alles, was PHP intern berechnet, schneller und performanter als äquivalente Funktionen, die über die Sprache definiert wurden. Versuche deshalb, solange du nur eine einfache Funktion wie die Rückgabe aller Verzeichnisse benötigst, so wenige Streams wie möglich zu verwenden.

Bildquelle - Vielen Dank an die Ersteller*innen f├╝r dieses Bild

Kommentare zum Artikel

Es sind noch keine Kommentare vorhanden? Sei der/die Erste und verfasse einen Kommentar zum Artikel "Moderne Methoden, um Verzeichnisse in PHP auszulesen"!

Kommentar Schreiben

Vom Autor Empfohlen

keyboard_arrow_up
Home Men├╝ Suche
close