Matze: race-condition-Nachfrage

Beitrag lesen

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