Aber wie kann ich nun genau diese Zeile durch neue Daten ersetzen?
Eine Zeile in einer Textdatei lässt sich in der Regel nur dadurch ersetzen, daß die komplette Datei neu geschrieben wird. Der Grund dafür ist schlicht und ergreifend, daß alle Datensätze (Zeilen) in einer Textdatei direkt aufeinander folgen und nur exakt soviel Platz einnehmen, wie sie für ihre Daten benötigen.
Sind die neuen Daten kürzer, kann man sie zwar noch in den bereits belegten Platz einfügen, sind sie aber länger, muß zwangsläufig ab der Position des belegten Platzes alles neu geschrieben werden.
Ob sich nun der Aufwand für eine individuelle Platzprüfung gegenüber einem kompletten Neuschreiben lohnt, ist zumindest bei kleineren Datenmengen wohl eher eine Glaubensfrage.
Eine weitere Möglichkeit wäre, von vornherein für die einzelnen Datenfelder einen bestimmten Platz zu reservieren (und damit auch eine fixe Zeilenlänge zu haben), so daß jeder Datensatz immer an einer exakt berechenbaren Position beginnt und sich auch bei Änderungen nichts überschneiden kann. Dieser Ansatz hat allerdings wiederum den Nachteil, daß entweder Platz verschwendet wird oder einige Daten auf Grund ihrer (unerwarteten) Länge nicht vollständig gespeichert werden können.
Eine übrigens sehr sinnvolle Alternative sind db-Dateien, mit deren Hilfe Du Datensätze einfach über einen Index lesen und speichern kannst, ohne Dir weitere Gedanken über die eigentliche Verwaltung auf der Platte machen zu müssen.
Das erspart Dir auch das unnötige Einlesen der gesamten Benutzerliste, obwohl Du nur einen Benutzer benötigst (wie Du es derzeit mit der zitierten foreach..file-Schleife machst).
Für PHP ist dieser Dateityp in <> beschrieben.
$infos = explode("||", trim($zeile));
$username = $infos[0];
$passwort = $infos[1];
In Perl ging das ganz einfach so:
($var1, $var2, $var3) = split(/||/, "");
Wie mache ich ähnliches in PHP?
list() ist Dein Freund:
list($infos,$user,usw..)=explode("||",..
Gruß,
soenk.e