Hallo!
Ich habe mir ein kleines Dateibasiertes Login-/Anmelde-Script geschrieben.
Klar wusste ich, dass ich mir Gedanken um das Thema race-condition machen musste.
Es kann ja rein theoretisch passieren, dass sich z.B. 2 Benutzer gleichzeitig mit dem selben Namen anmelden weil zwischen Abfrage ob der Benutzer eingetragen ist und dem eintragen und speichern des Namens sonst eine Lücke wäre die das ermöglicht.
Jetzt frage ich mich, wenn ich die Datei zum schreiben sperre, was passiert dann wenn genau in dem Moment zufällig jemand anders versucht sich ebenfalls anzumelden? Wartet das Script bis zur Freigabe oder bricht es ab oder...?
Zum Einlesen der Datei benutze ich einfach include(), da muss ich nichts sperren oder sonstwas.
Stimmt das soweit? Bevor ich mit Fehlern weiter mache, würde ich mich gern erstmal vergewissern ob ich es richtig gemacht habe.
Hier noch mein Code für den Umgang mit der Datei beim Schreiben:
Die User-Daten $xml_data
werden vorher aus der Datei gelesen, mit der Eingabe der Anmeldung verglichen (wegen Doppelanmeldungen), um die Eingaben der Anmeldung ergänzt und in die Variable geschrieben.
// URL zur Benutzerliste
$login_file = userlist.xml;
// Datei mit Schreibrechten öffnen und Inhalt löschen
$handle = fopen($login_file, "w");
// exklusive Schreibrechten erhalten
flock($handle, LOCK_EX);
// Datei auf 0 kürzen
ftruncate($handle, 0);
// Userdaten schreiben
fwrite($handle, $xml_data);
// Datei freigeben
flock($handle, LOCK_UN);
// Datei schließen
fclose($handle);
Hab ich alles richtig gemacht? :)
Danke und Grüße, Matze