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.
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);
}
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);
}
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";
}
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'), ['.','..']);
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.
Hinterlasse mir gerne einen Kommentar zum Artikel und wie er dir weitergeholfen hat beziehungsweise, was dir helfen würde das Thema besser zu verstehen. Oder hast du einen Fehler entdeckt, den ich korrigieren sollte? Schreibe mir auch dazu gerne ein Feedback!
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: