Jeena Paradies: str_replace in array

Beitrag lesen

Hallo,

@Paulchen da hat er leider recht. Wenn du anstelle von file_get_contents() einfach nur file() benutzt, dann hast du ein Array, dass zeilenweise deine Datei wiederspiegelt.
Aber ich kann die Datei dann so nicht abspeichern oder?
Weil dies geht doch nur mit fclose und um fclose zu bentutzen muss sie die datei doch mit fopen öffnen oder liege ich hier falsch?

Du scheinst da etwas zu verwechseln. Der Befehl file() gibt dir ein Array zurück in der jede Zeile der Datei einem Eintrag in diesem Array entspricht.

file_get_contents() gibt dagegen _kein_ Array zurück sondern die ganze Datei in nur einem einzelnen String.

Beide lesen nur daten aus einer Datei und geben sie an dein Script in verschiedener Form zurück. Keines der beiden kann in eine Datei schreiben. Zum Schreiben gibt es z.B. die Funktion

  • file_put_contents() die einen String oder ein Array mit Strings (das es dann mit "\n" joint) nimmt und ihn so in eine Datei schreibt
  • oder die Funktion fwrite() die einen File-Handler und einen String nimmt und diesen String in die Datei auf die der File-Handler zeigt schreibt.

fwrite() sieht man oft in Zusammenhang mit fopen() und fclose():

$file_handler = fopen("path/to/file.txt", "w");  
fwrite($file_handler, "String der in die Datei geschrieben wird");  
fclose($file_handler);

Im endeffekt kan man sich file_put_contents() als Kurzschreibweise für das Konstrukt mit fopen(), fwrite() und fclose() denken und das oben erwähnte file_get_contents() als Kurzschreibweise für ein ähnliches Konstrukt das aber die daten liest, und zwar: fopen(), fread() und fclose().

Was du also machen könntest ist erst mit file() die Datei in ein Array reintun, dann drüber laufen und die daten verändern und schlussendlich mit file_put_contents() in die Datei wieder schreiben.

$path = "path/to/file.txt";  
$lines = file($path);  
for($i = 0; $i < count($lines); $i++) {  
  $lines[$i] = str_replace("a", "b");  
}  
file_put_contents($path, $lines);

(Alles ungetestet und nur schnell aus dem Kopf geschrieben, bitte die Dokumentation für die exakte funktionsweise konsultieren.)

Jeena