Felix Riesterer: GB: Dateizugriff sicher blocken

Beitrag lesen

Liebe Selfer,

ich erstelle gerade ein Gästebuch. Es klappt alles ganz gut... solange nicht zwei Besucher "zufällig" zur selben Zeit ihre Postings abschicken (ist zwar noch nicht vorgekommen, aber wer weiß?).

Die Dokumentation zu PHP als auch das Forum hier haben mir nicht zufriedenstellend helfen können. flock() scheint problematisch zu sein (weil nicht auf allen OS identisch im Verhalten)...

Wenn mein Script aufgerufen wird, dann prüft es, ob eine Lock-Datei vorhanden ist. Theoretisch soll es dann so lange warten, bis diese Datei nicht mehr existiert, oder eben fünf Sekunden vorbei sind, um nicht in einen Timeout zu geraten.

Leider bleibt es beim Auffinden der Lock-Datei der Meinung, dass die Lock-Datei existiere, selbst wenn sie längst gelöscht wurde! Kennt PHP soetwas wie einen Cache? Hier mein Code:

$start = time();
      $jetzt = time();

while($jetzt-$start < 5)
         {
         if(!file_exists($lockdatei)) // diese Bedingung ändert sich nie... :-(
            {
            echo "<!-- nicht gefunden: Lockdatei! //-->\n";
            break;
            }
         $jetzt = time();
         }

Wie erreiche ich, dass die Bedingung in der if()-Abfrage auf den tatsächlichen Stand aktualisiert wird? Ich kann innerhalb von 5 Sekunden die Datei per Hand löschen, das Script erkennt das aber nicht. file_exists() "merkt" sich wohl sein Ergebnis für den Rest der Laufzeit...

Bitte Hilfe!

Liebe Grüße aus Ellwangen,

Felix Riesterer.