Tom: Dateien richtig öffnen und sperren

Beitrag lesen

Hello,

$fh = fopen($dateiname, 'a')     ## Datei zum Anhängen öffen oder anlegen
  if ($fh) fclose($fh);
  $fh = fopen($dateiname, 'r+');   ## vorhandene Datei zum Lesen und Schreiben öffnen
  $lock_ok = flock($fh, LOCK_EX);  ## Datei zum Zwecke des Lesens _und_ Schreibens sperren
                                   ## PHP wartet solange, bis es geklappt hat
  $file = fread($fh, filesize($dateiname)); ## Daten lesen

# hier jetzt die Manipulationen vornehmen am Buffer, also $file

fseek($fh, 0, SEEK_SET);         ## Dateizeiger zurück auf Anfang
  fwrite($fh, $file);              ## Veränderten Buffer zurückschreiben
  ftruncate($fh, strlen($file));   ## Dateilänge auf Bufferlänge kürzen
  fclose();                        ## Datei schließen und wieder freigeben

Es gibt mit advisory Locking keinen anderen Weg, der sicher funktioniert!

Um das noch klarzustellen. Die Methode, mit Kopie und Backup ist selbstverständlich noch sicherer. Hier ging es erstmal nur um die Methodik des Sperrens!

Harzliche Grüße vom Berg
http://www.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau