Hello,
öffne die Datei mir fopen(), dann liest du den Inhalt mittels file_get_contents(), dann splittest du den Inhalt mittel list() und split(), dann ändernst du die Felder, speichere dann alles per fwrite() und schließe die Datei mit fclose().
Wenn eine Datei mit file_get_contents() gelesen werden soll, muss sie nicht vorher mit fopen() gelesen werden.
File_get_contents() eignet sich nur für "ungesichertes Lesen", da man sie nicht mit einem gebundenen Lock belegen kann.
Das gleiche gilt für file() (und alle anderen namensbasierten Schreib- und Lesefunktionen), was dann hier wenigstens noch geeignet wäre, als file_get_contents(), aber immer noch zu Schmuddelprogrammierung führt.
also besser so:
define('CRLF', "\n"); ## Zeilenende-Zeichen muss zum System passen
define('FELDTRENNER','|');
$datei_name = "Datei";
$datei_handle = fopen("$datei_name", 'rw');
$datei_lock = flock($dateihandle, LOCK_EX);
$datei_laenge = filesize($datei_name);
$datei_inhalt = fread($datei_handle, $datei_laenge);
$datei_array = explode(CRLF, $datei_inhalt);
foreach($datei_array as $satznummer => $datensatz)
{
$datei_array[$satznummer] = explode(FELDTRENNER,$datensatz);
if($datei_array[$satznummer][0] == '2' and
$datei_array[$satznummer][1] == 'Tina' and
$datei_array[$satznummer][2] == 'Hannover')
{
$datei_array[$satznummer][2] = 'München';
}
}
foreach($datei_array as $satznummer => $datensatz)
{
$datei_array[$satznummer] = implode(FELDTRENNER,$datensatz);
}
$datei_inhalt = implode(CRLF, $datei_array);
fseek($datei_handle, 0, SEEK_SET);
fwrite($datei_handle, $datei_inhalt);
ftruncate($datei_handle, $length($datei_inhalt);
fclose($datei_handle);
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
