Hello,
das mit der Sperre würde ich lassen (bei einem einfachen Zähler, dazu ist das Skript auch zu kurz und zu schnell).
Das mit dem Posten würde ich dann auch besser lassen. Dazu war das Posting zu kurz und zu unsinnig ;-)
Beim Programmieren ist es ähnlich, wie beim Pimpern. Es gibt zwar verschiedene Methoden, Vater zu werden, aber die Betroffene wird kaum sagen: Jetzt bin ich n8r ein bisschen Schawanger, das vergessen wir mal lieber ganz schnell.
Beim Programmieren gibt es daher auch nur "richtig" oder "falsch". Ein bisschen richtig ist immer automatisch falsch, genauso, wie ein bisschen schwanger auch immer schwanger bedeutet.
Zurück zum Thema:
Wenn also Nebenläufigkeit beachtet werden muss, dann muss man die passenden Maßnahmen ergreifen, um es richtig zu machen.
Es ist hingegen nicht notwendig bei diesem Script (wenn es denn mal endlich ordentlich notiert wurde), die Gründe für eine Sperre zu erfragen und darauf zu ragieren, also mit einem "Non Blocking Lock" zu arbeiten. Ein Blocking Lock, der durch ein einfaches
$fh = fopen($filename, 'cb+'); ## [3]
if (flock($fh, LOCK_EX))
{
## Daten holen
## Daten manipulieren
## File zurückspulen ## [1a]
## Daten wegschreiben
## Filelänge anpassen ## [1a]
## File schließen und _damit_ auch das Lock wiederhergeben [2]
}
[1] kann auch unter a zu einem Truncate() zusammengefasst werden
[2] i.d.R. ist es falsch, das Lock gesondert wieder aufzuheben, da dann zumindest
vorher noch ein flush() notwendig wäre, aber auch anschließend nicht wieder
geschrieben werden darf!
[3] Bitte auch mal die neuen Openmodes 'x', 'x+' und 'c', 'c+' beachten
http://de2.php.net/manual/en/function.fopen.php
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg