Hans: Einfacher Counter performance touch()

Beitrag lesen

Hallo,

Nur wenn man das Sperren von Dateien vernachlässigt.

wollte jetzt nicht so weit ausholen, aber ok. Bei der klassischen Variante nutze ich natürlich eine Sperrung, allerdings nur beim schreiben in etwa so:

file_put_contents($file,file_get_contents($file)+1,LOCK_EX);

Was bedeutet das nun, wenn ich Martins anschauliches Beispiel zu Rate ziehe?

Ein gleichzeitiger Zugriff hat den gleichen Ausgangswert und somit geht ein Zugriff aufgrund der gleichen Zahl verloren, richtig?

Wenn ich nun aber die komplexere Version mit FLOCK benutze und auch die Datei fürs Lesen sperre, dann würde PHP einen der beiden gleichzeitigen Aufrufe in Wartestellung setzen bis die Datei wieder entsperrt wurde und es wäre absolut Verlass auf die Eintragungen, richtig?

Falls dem so ist, wäre auch meine Anfangsfrage gelöst, denn dann kann ein Counter auf Basis touch(), oder rename() nicht richtig funktionieren, weil ein klare Sperrung nicht machbar wäre. Denn dann ändert sich ja der Dateiname und eine Lesesperre wäre nur aktiv für eine Datei die nun aktuell gar nicht mehr existiert, richtig?

Gruss
Hans