Tom: Lösung.? ;-)

Beitrag lesen

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