Hello,
Das erklär mir mal - unter der Annahme, dass nur der PHP-Prozess auf die Counterdatei zugreift, das aber gern in mehreren Script-Instanzen überlappend. Wir haben fünf Schritte:
- open
- read
- rewind
- write
- close
Schritt 3 und 4 werden übersprungen, wenn nicht gezählt werden soll. Theoretisch kann diese Schrittkette an jeder Stelle unterbrochen und von einer weiteren Script-Instanz neu begonnen werden. Es kann nie etwas Schlimmeres passieren, als dass der Zählerwert um die Anzahl der gleichzeitig-überlappend laufenden Script-Instanzen "nachgeht". Die Sicherstellung der Integrität des Dateisystems an sich liegt dabei natürlich in der Verantwortung des Betriebssystems, jeder der fünf Schritte muss für sich betrachtet atomar sein.
Das liegt zum ersten mal am Format, in dem geschrieben wird.
Hier wird mit dem PHP-Standard gearbeitet. Der schreibt human readable numbers, also Klartext.
Bei einer einzigen Zahl in der Datei ist das System zugegebenermaßen nur "ein bisschen schwanger".
Der Zeitablauf könnte so aussehen.
0
A 1
B 2
B ...
B 10
A 20
A holt sich die 0 und schreibt ungestört die 1
B holt sich die 1
A holt sich die 1
B schreibt die 2
B holt sich die 2
B schreibt die 3
...
B schreibt die 10
A schreibt die 2, die Null von B's 10 wird nicht überschrieben. So wird aus der 10 eine 20.
Das soll jetzt nur die Fehlermöglichkeit verdeutlichen. Warum A solange vom Schreiben abgehalten wurde, ist hier nebensächlich.
Wenn man mehr als einen Wert in der Datei hält, wird es noch chaotischer.
Warum Du dich nun so dagegebn wärst, es den OP richtig machen zu lassen, verstehe ich allerdings nicht. Ein simples
flock($fh, LOCK_EX);
vor dem Auslesen zum anschließenden Schreiben reicht doch dafür völlig. Das ist doch kein Aufwand.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg