Tom: zeilenweise ersetzen

Beitrag lesen

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