Christian Seiler: Dateien im Client-Server-Betrieb

Beitrag lesen

Hallo,

Nebenbei habe ich in meinem eigenen Archiv gesucht und das hier gefunden...was hgaltet ihr davon?

Das Datei-Locking wird korrekt durchgeführt. Allerdings wird hier - im Gegensatz zu dem, was hier im Thread diskutiert wurde, nicht überprüft, ob sich der Dateiinhalt seitdem geändert hat. Daher: Du kannst Dir mit der Funktion sicher sein, dass die Datei nicht korrupt wird, Datenverlust kannst Du aber nicht ausschließen. Allerdings ließe sich in den bestehenden Code diese Überprüfung mit vergleichsweise wenig Aufwand einbauen.

Ferner zwei Anmerkungen:

$legitimation_daten = explode("\n", $legitimation_daten);

Nunja, ein preg_split ("/\r\n|\n|\r/", ... wäre in meinen Augen hier besser, damit man sich nicht auf die Zeilenende-Zeichen verlässt. Zwar wird in der Funktion weiter unten mit implode immer "\n" als Trenner verwendet (das ist gut so!), allerdings sollte man als Programmierer immer großzügig in dem sein, was man akzeptiert und strikt in dem sein, was man ausgibt. Sprich: implode mit "\n" lassen, aber lieber großzügiger beim Aufspalten sein. Dann macht man sich auch keine Probleme, sollte man z.B. unter Windows die Datei mal von Hand bearbeiten.

fseek($legitimation, 0, SEEK_SET);
  fwrite($legitimation, $legitimation_daten);
  ftruncate($legitimation, strlen($legitimation_daten));

Diese Art, mit fseek, fwrite und ftruncate umzugehen, ist etwas "um-die-Ecke-gedachter" als die anderen Vorschläge hier (einschließlich meinem), allerdings vermutlich auch einen Tick effizienter - es wird der Speicherplatz der bisherigen Datei wiederverwendet (was natürlich auch im anderen Fall passieren _kann_, falls der Kernel von sich aus optimiert, bei Deiner Lösung aber zwangsläufig passiert).

Viele Grüße,
Christian