Hello,
Wenn man vor hat, ein bestehendes File mittels eines Write-Prozesses (also fwrite, fputs[1], etc) zu verändern, dann muss man es _vor_ dem Auslesen sperren, und zwar Exclusiv.
Also
File öffnen
fopen()
File exclusiv sperren
# flock($file, LOCK_SH) ##tut also nicht genau das? [1]
flock($file, LOCK_EX) ## DAS tut es jetzt?
File auslesen
also fread()? ja
File im Buffer verändern
# wie? Indem man an bestimmten Postionen etwas austauscht, überschreibt, einfügt, usw
File aus dem Buffer zurückschreiben
# wie? Satzzeiger zurück auf Anfang, ganzen Buffer schreiben, Länge des Files anpassen
File in der Länge anpassen
# wie? mit ftrauncate()
File schließen und entsprerren
fclose(), nehme ich also an. ## Korrekt
[1] flock() ohne den Parameter LOCK_NB wartet solange, bis die Lockanforderung erfolgreich war. das kann auch solange sein, bis die maximale Scriptlaufzeit erreicht wurde. Dann wird das Script insgesamt rausgeschmissen und alle aktiven Opens und Locks werden automatsich besitigt.
Nur bei Argument LOCK_NB versucht das System nur einige Male gnaz kurz hintereinander, den Locking-Status zu erlangen. Wenn das in (typisch) 5 Versuchen im Millisekundenabstand nicht klappt, wird false zurückgegeben und mit dem nächsten Statement im Script weitergemacht...
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
