EisFuX: flock()

Beitrag lesen

(Hallo|Hi(ho)|Tag) nils-hero,

Hier der Code, falls ihn jemand gebrauchen kann/bewerten will.

<?php
        ...
        else {
            $inhalt = $post_sauber['textfeld'];
            $dateihandler = fopen($quelle, "w+");
            if (!$dateihandler) throw new Exception('konnte '.$quelle.' nicht zum Schreiben öffnen...');
            else {
                fwrite($dateihandler, $inhalt);
                fclose($dateihandler);
            }
        }
    }

else {
        $dateihandler = fopen($quelle, "r");
        if (!$dateihandler) throw new Exception('konnte '.$quelle.' nicht zum Lesen öffnen...');
        else $inhalt = fread($dateihandler, filesize($quelle));
    }
...

  
Hat zwar nichts mit "Sicherheit" zu tun, wohl aber mit Datenintegrität:  
  
Du öffnest im selben Script die selbe Datei ($quelle) sowohl zum Lesen ("r") als auch zum Schreiben ("w+"). Läuft das Script bspw. als Web-Anwendung, dann könnte es ja durchaus vorkommen, dass mehrere Instanzen deines Scripts versuchen, in die gleiche Datei zu schreiben, oder eine liest gerade, während eine andere schreibt. Das gibt irgendwann Datensalat. Also solltest du dich mit [flock()](http://de3.php.net/manual/de/function.flock.php) anfreunden und dieses nach den fopen()-Aufrufen einfügen. Ein Aufheben des Lockings ist nicht nötig, das wird auch mit fclose() erledigt.  
  
MffG  
EisFuX

-- 
[Nichts ist dem Zuwachs an Wissen förderlicher, als nach einer Antwort korrigiert zu werden.](http://community.de.selfhtml.org/zitatesammlung/zitat119)