Hi!
fopen(..
flock(.. 2)
Hier zwischen können andere Prozesse auf die Datei aber noch zugreifen (z.B. könnten 2 Apache-Prozesse denselben Wert aus einer Counter-Datei auslesen). Ist zwar sehr unwahrscheinlich, aber möglich.
Daher empfehle ich eine zusätzliche lock-Datei, also eine einfache Datei ohne Inhalt, wenn die da ist darf nicht zugegriffen werden. Zumindest bringt das Datenkonsitenz (wenn es darum geht), aber man sollte sich dann auch um eine vernünftige Fehlerbehandlung kümmern, bzw. mehrere Versuche ermöglichen. Auch kann es vorkommen dass die Datei mal aus irgendeinem Grund nicht gelöscht wurde, und dann kann man warten bis man schwarz wird -> dead-lock. Wenn die Zugiffe sehr lange dauern ist diese Methode aber auch problematisch.
Eine wirklich saubere/einfache Lösung um einen ID-Generator (der garantiert keine doppelten IDs erzeugt) mit PHP zu programmieren habe ich bisher nicht gefunden, es sei denn man überlässt das Problem der konkurrierenden Zugriffe einer hierfür optimierten Software wie einer DB. Oder man schreibt einen Dämon-Prozess, der dann systemweit nur in einer Instanz läuft, und die IDs per IPC oder Socket herausgibt :) Dann ist es wiederum sehr einfach. Oder man verwendet SHM und Semaphore (http://de3.php.net/sem), direkt aus PHP heraus... daber das hat jetzt vermutlich so ziemlich gar nichts mehr mit dem ursprünglichen Problem zu tun ;-)
Grüße
Andreas
SELFHTML Tipps & Tricks: http://aktuell.de.selfhtml.org/tippstricks/