remuen: Textfile sicher sperren bei gleichzeitigem Zugriff?

Beitrag lesen

Ich lese die Daten aus einem Textfile ein, mutiere eine oder mehrere Zeilen und schreibe die mutierten Daten wieder zurück. In letzter Zeit ist zweimal das Problem aufgetreten, dass die Daten plötzlich nur noch unvollständig im Textfile vorhanden waren. Meine Vermutung: Wenn zwei oder mehr User gleichzeitig darauf zugreifen, kommt da was in Unordung.

Mein heutiges Script sieht so aus:

$statistics =  file("$filename");
 ....
 (Hier Daten in Array mutieren/aufbereiten)

$statfile = fopen ("$filename","w+");
 flock($statfile, LOCK_EX);
 for($b=0;$b<=$usermenge-1;$b++)
   {
   fputs ($statfile,"$fragenstat[$b]$nl");
   }
 flock($statfile,LOCK_UN);
 fclose($statfile);

Das Datenchaos entsteht meiner Meinung nach dann, wenn ich mit file() die Daten einlese, während dem
ein zweites Script (ein zweiter User) gerade Daten ins gelockte File schreibt (ich kenne die Abläufe und das Verhalten der verschiedenen Funktionen leider zu wenig).

Wie kann ich verhindern, dass hier etwas passiert????

Überlegt habe ich mir, entweder das File anstelle mit file() direkt ins Array zu lesen, dies zeilenweise zu tun, das heisst beispielsweise so:

$statfile = fopen($filename, 'r');
 flock($statfile, LOCK_EX);
 while (!feof($statfile )) {
 $fragenstat = fgets($statfile , 256);
 .....
 (Hier Daten aufbereiten/mutieren)

for($b=0;$b<=$usermenge-1;$b++)
   {
   fputs ($statfile,"$fragenstat[$b]$nl");
   }
 flock($statfile,LOCK_UN);
 fclose($statfile);

Hier würde das Textfile schon beim Auslesen gelockt, d.h. ein zweites Script kann erst darauf zugreifen, wenn das Textfile wieder freigegeben wurde.

Meine Fragen:
Stimmt meine Überlegung resp. funktioniert diese Lösung zuverlässig, so dass mir im Textfile kein Chaos mehr entsteht?
Falls nein, wie müsste ich das Ganze lösen? Ev. mit einem eigenen Lockfile?

Vielen Dank im voraus für Eure Ratschläge!

Gruss
René