Die total geniale PHP Flat File Datenbank von Hugo Wiledal

Möchten Sie große Mengen Content verwalten und systematisch organisieren oder entwickeln ein eigenes Flatfile CMS, dann hilft die Flatfile DB von Hugo Wiledal

Juli 5, 2023 - Lesezeit: 5 Minuten

Inhalt

H.Wiledal FlatFileDB

Vermutlich hatte Hugo Wiledal an dem Tag an dem er sein Projekt bei Github (Link hier) eingecheckt hat einen schlechten Tag, zumindest lassen die wirklich vielen Schimpfwörter in der Dokumentation und im Programmcode vermuten. Dennoch handelt es sich um ein wirklich gutes PHP-Script mit etwa acht nützlichen Funktionen zum Anlegen, Löschen und Selektieren von Datensätzen aus einer leichten Flatfile DB im typischen CSV-Format.

Affiliate

PHP 8 und MySQL: Das umfassende Handbuch zu PHP 8. Dynamische Webseiten, von den Grundlagen bis zur fortgeschrittenen PHP-Programmierung

Dynamische Webseiten mit PHP und MySQL programmieren: Alles, was Sie dafür wissen müssen, steht in diesem Buch. Profitieren Sie von einer praxisorientierten Einführung und lernen Sie alle neuen Sprachfeatures von PHP 8 kennen. Die Autoren Christian Wenz und Tobias Hauser sind erfahrene PHP-Programmierer und Datenbankspezialisten. Sie zeigen Ihnen, wie Sie MySQL und andere Datenbanksysteme effektiv einsetzen. Mit diesem Wissen machen Sie sich rundum fit für dynamische Websites. (*

Wichtiger Hinweis - Diese FlatFileDB ist nicht für zeitkritisch schreibende Zugriffe geeignet - etwa Hit-Counter, Logger usw. Es kann passieren, das Sie Sperrzustände hervorrufen, die durch unterschiedliche zeitgleiche Sessions aus dem Web entstehen. In Folge dessen, erhalten Sie konkurierende Schreib-Zugriffe auf die Inhalte und fehlerhafte Einträge. Eine echte SQL-Datenbank würde dies mit Hilfe von Sperr- und Caching-Mechanismen lösen - die einfache FlatFileDB vermag dies jedoch nicht. Allerdings ist sie für rein lesende und wenig gleichzeitig schreibende Zugriffe bestens geeignet.

Die Dokumentation ist allerdings so schlecht gelungen, das kaum jemand diese Funktionssammlung nutzen kann, denn es fehlt der Hinweis wie diese Datenbank initial anzulegen ist - dieser Beitrag zeigt jedoch wie das geht und korrigiert zudem einige Programmstellen, um die Lauffähigkeit des Codes aus dem Jahr 2012 heute wieder zu gewährleisten.

Zwar gibt es mit JSON, XML oder YML bessere und modernere Möglichkeiten strukturierte Daten zu speichern aber die Datenbank von H.Wiledal mach irgendwie spass.

Zunächst Fehlerbehebung

Da das Projekt von Hugo Wiledal bereits 10 Jahre auf dem Buckel hat, werden mittlerweile einige PHP-Befehle nicht mehr in der Form unterstützt wie es 2012 der Fall war.

function _splitRow($row)

Die Funktion splitRow() soll den Datensatzeintrag in Spalten aufteilen. Für diesen Zweck gab es 2012 den Befehl split() der heute jedoch veraltet ist und nicht mehr unterstützt wird, daher wird dieser mit dem explode() ausgetauscht. Es ergibt sich daher das folgende Coding.

121  function _splitRow($row) {
122    //$arr = split('\",\"', $row); // Veraltet
123    $arr = explode('","', $row);   // neu
124    $arr[0] = substr($arr[0], 1);
125    $arr[count($arr)-1] = substr($arr[count($arr)-1], 0, strlen($arr[count($arr)-1])-3);
126    return $arr;
127  }

Ersetzen Sie daher die bisherige Zeile 122 mit dem explode aus Zeile 123 und schon läuft die kleine FlatFileDB wieder.

Eine leere Datenbank anlegen

Leider ist die Dokumentation von Hugo Wiledal derart schlecht, da überhaupt nicht erwähnt wird, wie die Datenbank aufgebaut sein soll. Mit etwas herumprobieren ist dabei die folgende Vorgabe entstanden.

001  "_id","title","author","date","description","content",
002

Die FlatFileDB muss eine Kopfzeile mit mindestens dem Feld _id besitzen, da dort ein Zeitstempel im MD5-Format eingetragen wird. Die restlichen Felder sind frei wählbar, die gesamte Kopfzeile muss mit einem Komma enden und eine Leerzeile darunter besitzen.

Die leere Datenbank im CSV-Format muss zwingend eine Leerzeile unter den Feldnamen enthalten, damit neue Daten automatisch untereinander beginnen. Falls Sie das vergessen erhalten Sie einen Abbruch. Erstellen Sie die Datenbanktabelle in einem Ordner Ihrer Wahl und referenzieren dann im PHP Script darauf.

Das PHP Script

Um die FlatFileDB in einem PHP-Script nutzen zu können, müssen Sie die Tabelle und das Script von Hugo Wiledal wie folgt in Ihrem Code einbinden.

001  <?php
002      include('flatfiledb/bin/FlatFileDB.php');
003      $db = new FlatFileDB();
004
005      // Insert
006      $table = $db->get("flatfiledb/dbtable.csv");
007      $entry = array(
008          "title"       => "Titel",
009          "author"      => "O.Lohse",
010          "date"        => date('Y.m.d H:m'),
011          "description" => "Ein neuer Datensatz wurde hinzugefügt.",
012          "content"     => "Beschreibung des Feldes",
013      );
014      $db->insert("flatfiledb/dbtable.csv", $entry);
015
016      // Select
017      $table = $db->get("flatfiledb/dbtable.csv");
018      foreach($table as $row) {
019          echo '<h1>'.$row["title"].'</h1>';
020          echo '<p>'.$row["description"].'</p>';
021          echo '<p>'.$row["author"].' - '.$row["date"].'</p><hr>';
022      }
023  ?>

Die Funktionsweise ist dabei einfach wie auch simpel erklärt. Zeile 002 inkludiert die Funktionen der PHP FlatFileDB von Hugo Wiledal in das PHP-Script. In Zeile 003 was das Datenbankobjekt erzeugt und in Zeile 006 wird die zu diesem Zeitpunkt noch leere Datenbanktabelle (CSV-Format) geladen. Zeile 007 erzeugt einen neuen Datensatz und speichert ihn in 014 in der FlatFileDB ab. Ab Zeile 017 bis 022 wird der soeben gespeicherte Satz gelesen und angezeigt.

Sie erhalten etwa den folgenden Inhalt in der FlatFileDB (dbtable.csv):

001 "_id","title","author","date","description","content",
002 "7940474e2ae0078ae3d8d577aecceb06","Titel","O. Lohse","2021.09.04 12:09","Ein neuer Datensatz wurde hinzugefügt.","Beschreibung des Feldes",
003 "c0c5ffd52d82c72acf62dd2183995f5a","Titel","O. Lohse","2021.09.04 12:09","Ein neuer Datensatz wurde hinzugefügt.","Beschreibung des Feldes",
004 "d3081b55768fb620bfeb6ff332346eec","Titel","O. Lohse","2021.09.04 12:09","Ein neuer Datensatz wurde hinzugefügt.","Beschreibung des Feldes",
005 "ff2aae30626d8b65d11e3717d98de818","Titel","O. Lohse","2021.09.04 12:09","Ein neuer Datensatz wurde hinzugefügt.","Beschreibung des Feldes",
006 "30999cb6658da313b987e7c3a7dacb3f","Titel","O. Lohse","2021.09.04 12:09","Ein neuer Datensatz wurde hinzugefügt.","Beschreibung des Feldes",
007

Aktualisieren Sie das PHP Script im Browserfenster mit F5 einige Male und Sie erhalten jedes mal einen Eintrag in der CSV Tabelle.

Die Funktionen beschränken sich allerdings auf get, update, insert und delete... folglich gibt es keinen search oder select in der Funktionsbilbliothek. Dieser müsste mit Hilfe des get und einer PHP foreach Schleife nachgebildet wierden - dies ist aber gar kein Problem.

Schade das ein so gutes Projekt auf Grund der schlechten Dokumentation kaum Beachtung findet und daher dessen Potential vollkommen verschwendet wurde. Dennoch hat es sich gelohnt in mühsamer Arbeit die Funktionsweise der FlatFileDB und deren Konfiguration herauszutüfteln. Die kleine FlatFileDB kann durchaus Kern eines kleinen CMS werden.

Sofern Sie ein anderes Trennzeichen der Datensätze bevorzugen, müssen Sie die Funktion splitRow() und insert() entsprechend anpassen.

Schlagworte:

Beiträge in der Kategorie "PHP":

Wie können Sie Programm Kommentare in json Dateien und Files vornehmen? Gibt es einen Kommentar-Token oder einen anderen Trick um in json zu kommentieren?

Sie können mit PHP ein Verzeichnis mit Ordnern und Dateien einlesen und anzeigen. Der Beitrag zeigt ein kurzes Codesegment mit dem opendir() Befehl aus PHP.

Mit diesem Beitrag erstellen Sie (oder als Download) eine unabhängige Affiliate Datenbank, die Sie in jedem CMS, jeder Webseite oder jedem Blog nutzen können.

Die Formularverarbeitung durch PHP ist der beliebteste Standard im Web. Nutzen Sie ein intelligentes Design, können Sie sich viel Arbeit und Stress ersparen.

Möchten Sie einen Log-Mechanismus entwickeln den Sie leicht in jedes PICO Template einbinden können, dann ist JavaScript und PHP ideal dafür.

Das Auflösen mehrdimensionaler Arrays ist in PHP sehr sperrig, daher in diesem Beitrag ein einfaches diskretes Design-Pattern, für die Auflösung von Arrays

Die kleinste PHP-Template-Engine bzw kleinste PHP-Template-Parser, der mit Heredoc Syntax arbeitet. Die Heredoc Syntax ist ideal für kleine Prototypen.

Mit diesem kleinen Script realisieren Sie einen Mailversandt mit Standard PHP und einer Sperrliste die den Versand abbricht wenn Sperrworte enthalten sind.

In diesem Beitrag können Sie eine kleine FlatFile Projekt Datenbank herunterladen. Eine Beispielimplementierung in Anlehnung an die FlatFileDB von H.Wiledal

Sie möchten einen alten Artikel aus dem Google-Index entfernen dann sollten Sie vorher diesen Beitrag lesen

Dieser Beitrag zeigt einen Heredoc Template Parser und mini CMS, erstellt in PHP, unter Nutzung der Heredoc-Syntax. Content, Template und Parser in einer Datei.

Mit diesem PHP Script lesen Sie eine Mail in Ihrem Postfach, werten den Inhalt mittels PHP aus und löschen im Anschluss die Mail aus dem Posteingang mit PHP.

Möchten Sie große Mengen Content verwalten und systematisch organisieren oder entwickeln ein eigenes Flatfile CMS, dann hilft die Flatfile DB von Hugo Wiledal

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

Beiträge mit PHP-Mail an die Seite senden und veröffentlichen

Kategorien

Automad

Das kostenlose Flat File CMS Automad bietet bereits nach der Installation auf dem Server das beste Layout unter allen CMS am Markt.

Bludit

Das kostenlose Flatfile CMS Bludit ist das beliebteste Content Management System, das dem großen WordPress sehr nahe kommt, jedoch deutlich mehr Sicherheit bietet.

CMS

In dieser Rubrik geht es um übergreifenden Themen aus dem Bereich der Content Management Systeme.

Coast

Coast ist ein CMS aus deutscher Feder und ist mit einem exzellenten HTML/PHP Frontend-Editor zu vergleichen, die Daten werden direkt in der HTML-Datei gespeichert.

GetSimple

Das kostenlose Content Management System GetSimple verspricht genau das, was der Name andeutet, ein stabiles Flat File CMS auf der Basis von XML-Dateien.

GRAV

Das kostenlose Content Management System GRAV gehört zu den komplexesten CMS, da es den größten Funktionsumfang mitbringt.

Handlebars.JS

Handlebars.js ist eine kostenlose JavaScript Template-Engine mit der einfache Webseiten oder Prototypen leicht und schnell erzeugt werden können.

htaccess

Die .htaccess ist die wohl wichtigste und mächtigste Datei, über die der Server seinen Umgang mit den Daten und Besuchern steuert.

Java

Java ist die strategische Programmiersprache für verteilte Anwendungen im Internet oder auch in der Client-Server Architektur und sogar auf dem Host.

Monstra

Das CMS Monstra ist ein überaus gelungenes und sauber entwickeltes CMS mit Admin-Backend und Flat File Datenbank.

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).

Pico

Das CMS Pico ist derzeit das ausgereifteste und einfachste headless CMS für den Einsatz großer Mengen an MarkDown-Files (Content).

Smarty

Smarty ist eine Template-Engine auf Basis der Programmiersprache PHP und ist in der Lage HTML-Vorlagen (Templates) dynamisch mit Content zu versorgen.

Typemill

Typemill ist zunächst ein ganz normales Flat File CMS, entfaltet jedoch sein wahres Potenzial mit einigen besonderen Plugins, die es zum kraftvollen Publishing-Tool macht.

WonderCMS

WonderCMS ist das mit Abstand kleinste CMS das es derzeit kostenlos gibt. WonderCMS kommt mit einem PHP-Script und einer JSON-Datenbank aus und bietet ein Backend.

WordPress

Das datenbankbasierte Content Management System WordPress ist das beliebteste CMS und hält die meisten Installationen - ist allerdings auch das am meisten attackierte System.

Derzeit sind noch keine passenden Beiträge vorhanden.