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.

Inhalt

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.


FlightCMS
2024-01-28
glob,Datei,Verzeichnis,Durchsuchen,Rekursiv
post
0

Ein eigenes CMS programmieren I.

In diesem mehrteiligen Workshop entwickeln Sie ein eigenes kleines Content Management System mit einer Flatfile Datenbank und Markdown Parser - inkl. Download.

Ein eigenes CMS programmieren II.

In der zweiten Hälfte des Workshops, geht es darum, das kleine CMS noch weiter auszubauen und vollwertig zu machen. Sie binden die Template-Engine Smarty ein.