Hi!
Im Prinzip stimmt das, denn sie wird am Scriptende von PHP geschlossen, wenn das noch nicht erfolgte. Die Frage ist, wie lange das Script nach dem Schreiben der Datei noch weiterläuft und es somit Gelegenheit zu weiteren zufälligen Nebenläufigkeitsproblemen gibt.
Ach so. Ich dachte file_get_contents macht genau das, was es sagt, nämlich open, read, close. ich erhalte ja kein Filehandle.
Ja, A erhält den Dateiinhalt. B erhält auch den (selben) Dateininhalt. Nun schreibt A die Datei neu mit x+1, B macht nun genau das selbe, ebenfalls mit x+1 und nicht etwa mit (x+1)+1. file_get_contents() ist zwar in sich atomar, aber der insgeamt gewünschte Vorgang ist es nicht.
Was ich aber meinte: Wenn du die Datei mit fopen() offen hast und Änderungen vornimmst, ist nicht garantiert, dass fwrite() die Datei auch sofort auf der Platte ändert. Es kann da nämlich noch ein Puffer aktiv sein, der erst mit fclose() oder einem fflush() garantiert geleert wird. Erst dann darf die Datei wieder gelesen werden. Wenn nun das fclose() implizit durch das Scriptende passiert und dieses noch ein paar Zeiteinheiten entfernt ist, lesen andere Zugreifer einen falschen Dateininhalt. Insbesondere bei der Handvoll Bytes, die der Zähler-Integer groß ist, wird der Puffer nicht gefüllt und damit ist mit einem Schreiben auf Platte erst beim (impliziten) fclose() zu rechnen.
Wie gesagt, beim Zähler ist es nicht tragisch, wenn da mal ein Zugriff verloren geht. Es gibt jedoch andere Anwendungen, bei denen das kritischer ist und deswegen versuche ich das hier etwas genauer als für den Zähler notwendig zu erklären.
Lo!