depp: Ans Ende einer Datei anhängen

moin
wie häng ich ans ende ner datei nen string dran?
danke

  1. Hi,

    <?
    $file = 'irgendwas.txt';
    if ($fp) {
        $fp = fopen($file, 'a'); # a wie append
        $wr = fputs($fp, $cont);
        $cl = fclose($fp);
    }
    ?>
    reicht das ...

    1. danke

    2. Hello,

      anders herum:

      <?
        $filename = 'irgendwas.txt';
        $fp = fopen($file, 'a+'); # wie append mit Leseberechtigung
        if ($fp) ## wenn ein Handle erteilt werden konnte
        {
          $write_ok = fwrite($fp, $cont);
          fclose($fp);
        }
        else
        {
          ## Fehlerbehandlung
        }
      ?>

      Das ist die einfache Variante, die auch meistens funktioniert, wenn der zu schreibende Block ($cont) nicht größer ist als ein Speichersegment. Das Öffen im Append-Modus macht die Operation  selber nicht atomar, das bedeutet, dass ein anderer Prozess, der ebenfalls mit einem ungeschützten Append zugreift, seine Blöcke zwischen die der anderen schieben kann.

      Ein gepufferter Block wird aber jeweils zusammenhängend geschrieben. Wenn $cont also zu groß wird, sodass auf einem System, dass noch mit 16-Bit-Adressen arbeitet, dieser auf zwei Pufferblöcke aufgeteilt werden muss, können Fehler auftreten.

      Man müsste also eigentlich die Datei öffnen, dann sperren (mittels flock() ein Semaphor setzen), dann auslesen bzw. die letzte Veränderung feststellen, entscheiden ob dies so noch der erwartete Zustand ist, dann schreiben und schließen/entsprerren.

      Wennn alle Prozesse, die auf einem System installiert sind, dieses Verfahren einhalten, funktioniert es einwandfrei. Ein einziger, der sich nicht an die Regeln hält, kann aber das System schon "zerstören".

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

      Tom

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