Hallo,
Aber das wär auch nicht weiter schlimm,wenn die datei während dem lesen geändert wird,
weil es könnte ja sein dass ein anderes cgi gerade mal ein neues user:password in die htpasswd reinschreiben will
und dann wäre ein blockiren dieser datei nicht das beste .
Das andere cgi hat priorität (löschen von passwörtern oder hinzufügen)
Ich würde an deiner Stelle schon ein gescheites Locking implementieren. Vor allem, da du jetzt erwähnt hast, dass ein anderes Script auch in die Datei schreiben soll.
Ein Konflikt ist denke ich mal recht unwahrscheinlich (ich denke mal dein Script wird nur recht selten aufgerufen um die Datei zu administrieren), aber wenn du von vorneherein sauber programmierst, dann hast du später keine Probleme.
Das Script, welches die Datei beschreiben soll muss einen LOCK_EX verwenden. Dabei ist darauf zu achten, dass die Datei während des ganzen Vorgangs nicht geschlossen wird.
Ansonsten könnte z.B. folgendes passieren, wenn zwei Einträge aus der Datei gelöscht werden sollen.
- Script 1 liest die Datei in ein Array (oder so)
- Script 1 löscht seinen Eintrag
- Währenddessen liest Script 2 die Datei
- Script 1 schreibt die neue Datei ohne den gelöschten Eintrag
- Script 2 löscht seinen Eintrag und schreibt sein Array in die Datei (ebenfalls ohne seinen Eintrag)
Der Eintrag den Script 1 löschen sollte ist jetzt wieder da, da Script 2 die Datei gelesen hatte bevor Script 1 sie verändern konnte.
Es kann auch passieren, dass beim gleichzeitigen lesen und schreiben unvorhergesehens auftritt. Wenn ein Script die Datei verändert, während ein anderes noch am lesen ist, würde es mich nicht wundern, wenn das lesende Script plötzlich Mist zurückliefert. (Es kann ja sein, dass oben ein Eintrag rausgelöscht wurde und der Pointer zwischen zwei Lesevorgängen plötzlich nicht mehr da steht, wo man ihn erwartet.)
Um all das zu vermeiden musst du locking implementieren. Und zwar in allen deinen Scripten welche auf die Datei zugreifen.
(Stell dir mal vor du wurschtelst unglücklicherweise gerade dann was in der Datei rum, wenn dein Server am lesen ist...)
Viele Grüße,
Stefan