Guten Tag,
Ich programmiere schon eine ganze Weile in PHP und habe bisher zum speichern meiner Daten immer auf MySQL oder andere Datenbanken zurückgegriffen.
Nun stehe ich vor einem Projekt bei dem ich definitiv keine Datenbank zur Verfügung habe, aber dennoch alle möglichen Daten wie beispielsweise Nutzerdaten, News- und Gästebucheinträge etc. speichern muss. Dabei kommt logischerweise nur das speichern in Dateien in Frage und da ich sehr gerne mit XML als Schnittstelle arbeite und es mittlerweile in PHP sehr schöne API’s dafür gibt, habe ich mich dafür entschieden.
Bevor ich aber nun Anfange stehe ich vor einem großen Problem, und das ist die Frage, wie ich das speichern der Daten zuverlässig regeln könnte. Auslesen einer Datei ist kein Problem, aber schreiben sehr wohl.
Was passiert beispielsweise, wenn sich das Speichern von Gästebucheinträgen verschiedener Nutzer zeitlich überschneidet? Was passiert wenn ich gerade einen neuen Newseintrag speichere und ein Nutzer in diesem Moment gerade aus der News-XML-Datei liest?
Es versteht sich von selbst, dass ein „Wrapper“ gebraucht wird, der schreib bzw. lese Anfragen der Nutzer puffert und diese dann chronologisch (nach dem Zeitpunkt in dem sie aufgegeben wurden) abarbeitet.
Und an diesem Punkt scheitert mein Gedankengang, denn wie könnte man dies mit reinem PHP realisieren, ohne das der angesprochene Puffer für die Schreib- und Leseanfragen wiederrum als Datei implementiert wird, was mich in einen Teufelskreis führen würde?
Eine Idee wäre eine Nutzerübergreifende Session, von der ich nicht weis ob sowas existiert, und falls ja dann hängt diese Lösung mit sicherheit stark vom verwendeten Webserver resp. dessen Konfiguration ab.
Eine andere Idee wäre ein Eventgesteuertes Script, wobei da die Frage auftritt inwieweit PHP dies unterstützt. (Ich habe mal gehört dass die Software „Woltlab Burning Board“ ein Eventsystem beinhaltet, aber darüber habe ich mich nicht weiter informiert)
Meine Frage ist nun: Gibt es hier jemanden der sich bereits mit diesem Problem beschäftigt hat oder kennt jemand bereits eine Lösung? Hat jemand noch weitere Ideen wie man dies bewerkstelligen könnte?
Ich erwarte hier keinen Quellcode, aber es wäre schön wenn mir jemand seine Gedankengägne mitteilen könnte.
viele Grüße,
Unic
p.s. Ich weis, dass es bereits einen Thread mit einem ähnlichen Thema gibt, aber der hat mir leider nicht viel weiter geholfen.