Verzeichnis rekursiv mit glob()


Das ist die kleinste PHP Template-Engine, bzw. das kleinste PHP-CMS der Welt, erstellt mit der Programmiersprache PHP und 7 Zeilen Code.

Was ist glob()

Die PHP-Funktion glob() ist in der Lage Dateinamen oder Verzeichnisse, auf Basis einer RegularExpression, zu suchen bzw. zu maskieren. Als Ergebnis liefert glob() ein iterierbares Objekt zurück (siehe PHP-Doku).

Mit glob() rekursiv suchen

Das folgende Codebeispiel stammt aus dem Flatfile CMS FlightCMS und listet alle Beiträge innerhalb bzw. rekursiv von $dir auf.

foreach (glob($dir.'*', GLOB_ONLYDIR) as $file_name) 
{
    echo 'Verzeichnis: '.$file_name;

    foreach (glob($file_name.'/*.md') as $file_name) 
    {
        if (!stripos($file_name, 'index.md') && !preg_match('{_}', $file_name))
        {
            echo 'Datei: '.$file_name;
        }
    }
}

Rekursiv durchsuchen mit glob()

Die Funktion glob() beginnt in der äußeren Schleife mit dem auslesen der gefundenen Verzeichnisse GLOB_ONLYDIR und übergibt das aktuelle Verzeichnis an die innere Schleife, die dann alle enthaltenen Dateien mit dem Pattern *.md ermittelt.

Der zusätzliche if-Zweig soll dabei lediglich verhindern, das im bereits genannten FlightCMS, index.md und mit beginnendem Unterstrich _ als unsichtbar gekennzeichnete Beiträge aufgelistet werden, diese sollen verborgen bleiben.

Als Ergebnis entsteht etwa die folgende Ausgabe:

  • kategorie-1
    • index.md => wird nicht angezeigt
    • beitrag-1.md
    • beitrag-2.md
    • _beitrag-3.md => wird ebenfalls nicht angezeigt
  • kategorie-2
    • beitrag-a.md
    • beitrag-b.md

Vorteile von glob()

Der größte Vorteil der Funktion glob() liegt auf der Hand, es ist die Einfachheit mit der diese Funktion verwendet werden kann. Es reichen wenige Zeilen Code aus, um komplexe Datelisten zu maskieren und auszugeben - das ist extrem hilfreich.

Nachteile von glob()

Die Funktion glob() ist intern sehr komplex (wer hätte es gedacht) und daher auch nicht sehr performant.

Dem aufmerksamen Leser wid allerdings aufgefallen sein, das der Code nicht unendlich rekursiv im Verzeichnisbaum hinabsteigt, sondern auf eine Stufe begrenzt ist. Es ist aber recht leicht beim Auffinden eines Verzeichnis innerhalb der inneren Schleife einen erneuten Aufruf auf sich selbst zu erzeugen und das neue Verzeichnis mit $dir an die äußere Schleife weiterzugeben.


Mein Name ist Oliver Lohse. Ich bin diplomierter Wirtschafts-Informatiker und Organisations-Programmierer in verschiedenen Sprachen bzw. Markup-Dialekten, z.B. Java, JEE, COBOL, PHP, Python, MySQL, HTML, CSS, ANSI C, Lisp, Rexx, JavaScript, Scheme, ActionScript 2.0, Maschinensprache, Assembler und JCL. Seit mehr als 25 Jahren arbeite ich in einem großen Softwareunternehmen für Versicherungen in Hannover Niedersachsen.

FlightCMS
2024-01-28
glob,Datei,Verzeichnis,Durchsuchen,Rekursiv
post
Kontakt@Oliver-Lohse.de

PHP

PHP ist die strategische Programmiersprache des Internets, mit PHP geht alles und ohne PHP nichts! Allerdings ist PHP nicht auf lokalen Client-Umgebungen verbreitet (aber möglich).

Datenschutz

Die Webseite verwendet keinerlei Tracking- oder Speichermechanismen, die einen Rückschluss auf das Leserverhalten und Ihre Identität zulassen. Die Webseite verwendet keine Cookies, denn Cookies haben einen schlechten Ruf.

Impressum

CMSWorkbench ist eine Entwicklerseite über meine Arbeit im Bereich der Content Management Systeme. Die vielen Codeschnipsel sind im wesentlichen als kleine Notizzettel zu werten als das es ausgereifte Beiträge wären.