Was ist hier falsch?

pycak

Mitglied
Hallo!

Kann mir jemand sagen was hier falsch ist und warum die datei.php immer geleert wird?
--------------------------------------------
$fp = fopen("datei.php", "w");`

$file = $file("pass.php");

$suche = $alt;
$ersetze = $neu;

foreach ($file as $line) {

$line = str_replace($suche, $ersetze, $line);
}

fclose($fp);
---------------------------------------------------------------

Der Sinn ist eigentlich, dass die datei nach einem Begriff durchgesucht wird, und dieser mit einem neuen ersetzt wird. Alles andere soll unverändert bleiben.
 
Ich helfe dir mal auf die Sprünge:
Wenn du den Mode "w" beim öffnen einer Datei einsetzt so wird die gesamte Datei sinngemäß eigentlich gelöscht und neu unter dem gleichen Namen wieder angelegt. Somit muss sie immer leer sein. Wenn du die Datei auslesen willst, dann benutze einfach "r".

Die Modes:
Mode | Beschreibung
---------------------------------------------------------------------------------
r | Öffnen für lesen der Datei
r+ | Öffnen für lesen und schreiben
w | Öffnen für schreiben (Datei wird vorher geleert)
a | Daten werden am Ende der Datei angefügt

Es gibt zwar noch weitere Modes aber die benutzt man eigentlich kaum.

Mit freundlichem Gruß
der_Maiki
 
Ich schätze mal du hast das hier modifiziert, ne ?

PHP:
<?php 
$filename = "deine.txt"; 
$zeilen = file($filename); 

$pattern = "#$b = 2;#si"; // Suche nach 
$replace = "$b = 8;";     // Ersetze durch 
$zeilen = preg_replace($pattern, $replace, $zeilen); 

$neue_txt = implode("", $zeilen); // Zusammenbauen der neuen Txt 

$handle = fopen($filename, 'w+'); 
fwrite($handle, $neue_txt); // Überschreiben der alten Txt 
fclose($handle); 
?>

Nur nochmal zur Erklärung ...
Mit $zeilen = file($filename); wird die Datei "deine.txt" in die Variable $zeilen geladen, wobei $zeilen ein Array ist. $zeilen[0] wäre die erste Zeile, $zeilen[1] die zweite usw.
WCHITG : Du darfst vor file() kein $ schreiben.
Du musst/darfst die Datei hier noch nicht fopen! Zumindest nicht mit dem Modus w+/w,
da dieser die Datei leert.

$zeilen = preg_replace($pattern, $replace, $zeilen);
Hier wird jetzt jede Zeile durchsucht und gegenfalls ersetzt.

Durch implode() wird der Array wieder zu einem String, denn du dann mit fwrite($handle, $neue_txt); wieder in die noch leere Datei schreibst.

Wichtig dafür ist, dass die txt und die php-Datei im selben Verzeichnis liegen. Falls nicht musst du das ergänzen!

Das Script funktioniert 100%, habs getestet.
 
Zuletzt bearbeitet:
Zurück