Sven Rautenberg: Flatfile-Organisation | Wie macht Ihr es?

Beitrag lesen

Aloha!

kleine frage: wie geht Ihr mit flatfile-dbs um?

Ich habe bislang für mehr oder weniger umfangreiche Datenbanken immer Datenbanksysteme verwendet.

Einzig für ein wirklich winziges "Problem" habe ich IMHO eine trickreiche Lösung gefunden:

PHP erzeugt den Code, der später mit include() eingebunden wird, selbst. :)

Hintergrund: Ein kleines "Newssystem" sollte ermöglichen, gewisse Newsseiten freizuschalten, und eine der Newsseiten als Teaser zu definieren (das ganze ist unter http://www.rb3m.com/news/ zu sehen - und noch nicht wirklich ausgereizt. :) ).

Da ich mir irgendwo merken muß, welche News freigeschaltet sind und welche Nachricht als Teaser fungiert, habe ich die entsprechenden Variablen ganz einfach in eine PHP-Datei geschrieben.

Der relevante Code-Teil (Dateipfade sind gekürzt):

foreach ($HTTP_POST_VARS['frei'] as $page)
  {
    $zustand[$page]='on';
  }
  $fp = fopen("zustand.php","w");
  flock($fp,2); # File locked
  fputs($fp,"<?php $zustand = unserialize("".addslashes(serialize($zustand)).""); $tease = "".$HTTP_POST_VARS['tease'].""; ?>");
  flock($fp,3); # File unlocked;
  fclose($fp);

Damit wird als Resultat folgende Zeile in die Datei zustand.php geschrieben (je nach Freischaltzustand natürlich):
<?php $zustand = unserialize("a:2:{s:13:"20020716.html";s:2:"on";s:13:"20020712.html";s:2:"on";}"); $tease = "20020716.html"; ?>

Auf diese Weise wird später die Datei einfach mit include("zustand.php") wieder eingebunden, und das Array $zustand sowie die Variable $tease sind danach verfügbar.

Die Alternative wäre natürlich, jeden Arrayeintrag separat in der Datei abzuspeichern (als Konfigurations-Include-Datei auch sehr zu empfehlen):
<?php
$zustand[1]="wert1";
$zustand[2]="wert2";
...
?>

Da PHP auch Session-Variablen mit serialize() und unserialize() aus der Textdatei liest und in sie schreibt, denke ich, dass dieses Verfahren hinreichend schnell ist, um für kleine Datenspeicherungen auszureichen.

- Sven Rautenberg