Hi!
Wird bei der Funktion flock() sowas gemacht, oder würden die weiteren Benutzer eine Fehlermeldungen bekommen, dass die Threaddatei gerade nicht geöffnet werden kann und ihre Formulareingaben somit verloren gehen?
Unter Unix funktionieren Dateisperren auf freiwilliger Basis. Wenn sich verschiedene Prozesse nicht ins Gehege kommen sollen, müssen sich alle gleichermaßen die Sperren berücksichtigen. Das heißt, eine gesperrte Datei kann trotzdem von anderen mit fopen() geöffnet werden. Jeder muss selbst flock() befragen, ob eine Sperre existiert.
Es gibt zwei Arten des flock()-Verhaltens, blocking und non-blocking. Bei blocking wartet die Funktion bis die Sperre freigegeben wurde, bei non-blocking kehrt sie sofort wieder zurück. Du musst dann selbst entscheiden, was du in dem Fall machst, beispielsweise eine Warterunde einlegen oder abbrechen oder sonst was.
Auf eine Datenbank möchte ich eben verzichten, da dass Skript möglichst simpel sein soll, keine Avatare, keine PMs, auf möglichst jedem Webspace mit PHP und ohne MySQL o.ä. ohne grossen Aufwand installierbar, ohne Mitgliederregistration - die Benutzer sollen sich über Tripcodes identifizieren.
Eigentlich sollte SQLite mittlerweile zur Grundausstattung gehören. Das ist allgemein gesagt eine (einfach gehaltene) einbaubare Datenbank-Engine, und sie ist seit PHP 5 als per Default freigegebener Extension enthalten. Nach außen hin sieht man nur, dass eine Datei angelegt wurde. Das ist also quasi wie dein dateibasierendes System, nur etwas komfortabler.
Wie läuft das mit Dateisperren bei Imageboards? Die meisten Skripte sind noch in Perl geschrieben, benutzen keine Datenbank und gerade diese Foren verursachen z.T. äusserst viel Traffic.
Dazu kann ich nichts konkretes sagen. Lesezugriffe funktionieren auch ohne Sperren problemlos parallel, aber sobald du Schreiben hinzunimmst, musst du die Sperrproblematik berücksichtigen, und dann auch für das Lesen, sonst du liest unter Umständen nur teilweise geschriebenen Dateien.
Lo!