2 4 2 11 0 0 0

Eine Dateienstruktur mit Bedingungen gezielt auslesen

Die hier beschriebene Datei als auch die folgende mit dem Thema Linkaufbau muss in der index.php inkludiert werden.
Die Referenz ist vor dem iFrame zu platzieren. Der Code soll nur einmal zu Besuchsbeginn ausgeführt werden. Der Code funkt natürlich auch nach dem Refresh, klar.
Das Auslesen von Verzeichnissen wird überall in Ausführungen über PHP hinlänglich beschrieben. Ob gezielt nach Dateiendungen gesucht wird wie hier:


// "*." egal wie die Bilder benannt wurden, aber ein jpg muss es sein.
function meineBilder($dir="url",$type="jpg") {
 $x = 0;
 foreach (glob($dir."*.".$type) as $filename)    {
  $array[$x]['file'] = $filename;
  $x++;
 } 
 return $array;
}

oder einem Zeichen, das in der Dateibenennung vorkommen muss: im Beispiel ein „d“ : wie die Ausgabe zeigt: ../04_PHP/dummy.htx


$url = "../04_PHP/" ;
foreach (glob($url."{[d]*.htx}", GLOB_BRACE) as $filename) {
  echo "wie die Ausgabe zeigt: ../04_PHP/dummy.htx ";
}

Worüber ich hier schreiben möchte, ist das Auslesen von Ordnern und Dateien, um daraus die Links auf dieselben automatisch formen zu können. Im Klartext: Ich bemühe mich garnicht erst einen Linkaufbau zu texten, das macht PHP. Gerade an diesem Projekt muss klar werden: Wenn ich eine neue Datei für ein Thema erstelle, bastelle ich nicht auch noch an den Links oder ich muss einen Dateinamen ändern, weil im Nachhinein klar wird, dass der nicht recht passen will.
Also stelle ich eine Bedingung vorweg, die da lautet: Ordnern und Dateien müssen Zahlen und zwar zweistellig voran gestellt werden wie folgt "01_". Daraus läßt sich ableiten, dass alle nicht so geformten außenvorbleiben, wie dummy.htx. Der ist zwar im Ordner 04_PHP, wird aber von einem Link auf sich ausgeschlossen.

Hier noch ein ganz wichtiger Hinweis:
Dateien, die für einen Ordner gelten sollen, werden nicht in den Ordner gelegt, sondern befinden sich auf gleicher Ebene. Das geht zwar auch, d.h. erfast würden sie, aber dann hat man mit dem Problem zu kämpfen, das die Referenzen zu anderen Dateien nicht mehr stimmen. Das kann man zwar mit zusätzlichen Abfragen wieder abfangen. Das hier ist aber bereits kompliziert genug, zu erklären.

Und nun kommt Ernst:


$path = '.' ; // Die Datei, die directory abbilden soll, wird von der index.php gestartet.
// Nicht in der main.php. Die würde jedesmal feuern, wenn ein Link gedrückt wird.

// Sonderzeichen aus den Datei- oder Ordnernamen wieder wandeln. 
Eine weitere Formung der Datei-/Ordnerbezeichnungen besteht darin, Leerzeichnen mit einem Unterstrich zu versehen
und Sonderzeichnen ein & voranzustellen, weil diese Schreibweise garantiert nicht vorkommt. 
Ein ä wird &ae geschrieben oder ß wird &ss, da nicht jedes ss zu ß geformt werden soll, alternativ auch &sz .
Alle Links sollen nun wieder richtig geschrieben werden.
aus einer Bezeichnung z.B. Stra&szenunterf&uehrung wird wieder Straßenunterführung
// Das geschieht in Zeile 23 und 32.

Zum Erfassen aller Ordner und Dateien 15: musste ich nachträglich dir() mit scandir() ersetzen. Nach dem Hochladen auf den InternetServer stellte ich eine für mich wahllose Aneinanderreihung der Ordner und Dateien fest. Das ist für mich erst einmal unergründlich, aber mit scandir() wird bereits eine aufsteigende Sortierung festgelegt.

18: $pre: die Ordnungszahlen erfassen. Die ermittelten zwei Stellen nenne ich mal Präfix. Enthalten können noch immer Ordner und Dateien sein, die den Präfix „die zweistellige Zahl“ nicht besitzen.
19: nun wird gefiltert.
25: wird für die Schleife in 57 benötigt.
27: erfassen, was in den Hauptordnern enthalten ist.
34: Unterscheiden, ob die Arrays für Ordner oder Dateien gefüllt werden sollen.

Arrays werden gefüllt mit den Linkbezeichnern und den relativen Pfaden.
Die 37: wird im Thema PHP Meta-Daten MetaDaten per PHP eingehender beleuchtet. Das würde sonst den Rahmen hier sprengen.

Nun werden Arrays gebildet, die eine lückenlose Indizierung erhalten. (Weder Ordner noch Dateien müssen fortlaufend nummeriert sein). Es gilt also Platzhalter im Array zu erzeugen:
62: und 63: für Ordner, 71: und 73: für Dateien

Hier wird nur noch die Ausgabe für die Textdateien geformt.
90 / 91 und 106 / 107: Für die Funktion AUSGABE werden letzte Korrekturen vorgenommen und alles für die Variablen (d, f, dp und fp) formatiert.
116 bis 121: die Funktion AUSGABE schreibt in Textdateien die Dateinamen und ihre URLs (110 bis 115).
Damit wird auch klar, dass ich hierfür keine Datenbank in Anspruch nehme, sondern alles in Textdateien abspeichere .

Die Abbildung der php-Datei habe ich für die Ausgabe gestückelt, um nahe am Code dokumentieren zu können.

Als nächstes folgt die Formgebung der Linkausgabe.
 


Dokument geändert am: 05. Aug. 2016 20:04