Hallo Tom!
Könnt ihr mir verraten wie ich einen Array in eine datei schreiben kann? Allerdings ist in der Datei schon etwas drinne, also soll er die Datei einfach überschreiben.
Also, dann musst Du die Datei so öffnen:
$fp = fopen ('dateiname', 'w');
Das gilt aber nur dann, wenn niemand anderes zur selben Zeit Zugriff auf die Datei hat. Sonst gibts Knoten...
Der einzig praktikable Öffnungsmodus für shared Files ist unter Berücksichtigung des dämlichen advisory Lockings "a+" mit anschließendem Locking und Positíonierung des Dateizeigers.
Und was bringt das? Und wieso nicht "w"?
Ich hatte mal das Problem dass ich "unique-ids" erzeugen wollte. Das Locking von PHP funktioniert auch - wenn alle sich an die Spielregeln halten, nicht 100%ig. Es ist zwar sehr unwahrscheinlich - aber möglich dass ein 2. Prozess Zurgiff auf die Datei erlangt, zwischen einem fopen und einem flock. Und wenn ich in so eine Textdatei eine unique-id schreibe, dann ist das recht doof wenn dann auf einmal 2 Prozesse von derselben Zahl ausgehen, und rein zufällig die selbe ID erzeugen ;)
Für mich war die einzige Lösung damals - Verwendung einer externen Lock-Datei. Das heißt prinzipiell:
fopen($file_lock)
flock(LOCK_EX)
fopen($file_unique_id)
fputs
fclose
flock(LOCK_UN)
fclose
Weitere Möglichkeit íst zum Sperren einfach irgendeine Datei nehmen, das heißt immer wen gesperrt ist bestimmte Datei in "gesperrt" umbenennen, und danach wieder zurück... oder solche Späße halt.
Kann man das mit Deine Methode komplett umgehen? Bedenke nur dass ich in diesem Fall an die Daten in der Datei unbedingt dran muss, und zwischen Lesen und Schreiben muss die Datei geschützt sein.
Grüße
Andreas