dedlfix: nur eine bestimmte zeile überschreiben

Beitrag lesen

echo $begrüßung;

Das geht mit Textdateien nicht.
wirklich? hmm, ich habe in einem anderen Forum diese Lösung gefunden:
<?php
$fdata = fopen('data.txt',"w");
$hmm = file($fdata);

file nimmt einen String mit einem Dateinamen entgegen. Mit der Resource, die fopen zurückliefert, kann es nichts anfangen.

$hmm[0] = "Neuer Text";
echo $hmm[0];
fwrite($fdata,"Hallo2");

Damit wird der gesamte Inhalt der mit fopen geöffneten Datei durch ein Hallo2 ersetzt. Beachte das w bei fopen(). Das war sicher nicht dein Ziel.

fclose($fdata);
?>

geht das wirklich nicht?

Das Prinzip wie ich es beschrieb bleibt das gleiche, nur dass durch das Array, das von file() zurückgegeben wird eine Abkürzung verwendet wird. Besser gesagt "würde", wenn das obige Script richtig geschrieben wäre.

Richtig wäre es so:

Der Inhalt der Datei wird mit file() in ein Array eingelesen. Für jede Zeile in der Datei wird dabei ein Feld in dem Array angelegt.
Für die zu ändernde/ersetzende Zeile wird das entsprechende Feld bearbeitet.
Das gesamte Array wird wieder in die Datei zurückgespielt:

$f = fopen('dateiname', 'w');  
fwrite($w, implode('', $array)); //implode macht aus dem Array wieder einen String  
fclose($f);

Ab PHP5 kann man die drei Zeilen auch noch mit file_put_contents() abkürzen.

Aus Dateisystem-Sicht ändert sich nichts. Die komplette Datei muss neu geschrieben werden.

echo "$verabschiedung $name";