nur eine bestimmte zeile überschreiben
beat
- php
hallo liebes forum
wie kann ich es anstellen, dass ich nur eine bestimmte zeile überschreiben kann in einer .txt datei?
also ich lese die zeile 23 in meinem script aus, lösche das bestehende und schreibe dann den gewollten text hinein.
vielen dank für eure hilfe!
echo $begrüßung;
wie kann ich es anstellen, dass ich nur eine bestimmte zeile überschreiben kann in einer .txt datei?
Das geht mit Textdateien nicht. Höchstens, wenn der zu ersetzende Text exakt die gleiche Länge hat wie der neue.
Die übliche Weise ist, den Inhalt der Textdatei bis zum Beginn der zu ersetzenden Stelle in eine temporäre Datei zu schreiben, dann den neuen Text hinzuzufügen und dann den Rest der alten Datei nach der zu ersetzenden Stelle anzuhängen. Alte Datei löschen, temporäre Datei umbenennen. Fertig.
Wenn mehrere Benutzer gleichzeitig auf die Datei zugreifen können, dann ist ein Locking-Mechanismus zu verwenden, sonst gibt es Zugriffskonflikte. Wie das geht, weiß der Tom ganz genau, der das unter http://selfhtml.bitworks.de/ bei den Flat-File-Funktionen anwendet.
echo "$verabschiedung $name";
hallo
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);
$hmm[0] = "Neuer Text";
echo $hmm[0];
fwrite($fdata,"Hallo2");
fclose($fdata);
?>
da kommt aber diese Warnung:
Warning: file() expects parameter 1 to be string, resource given in /home/domain.ch/html/php/gb/edit.php on line 69
geht das wirklich nicht?
Vielen dank für die Wntwort!
mfg
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";