nubbi: fünf zeilen in datei überschreiben

Hallöle,

also wie gesgat ich möchte immer die ersten fünf zeilen in einer Datei mit bestimmten Inhalten stopfen (überschreiben), wie muss ich das machen?

$file=fopen('datei.php');
flock($file,1);
fwrite($file,"Zeile1 \n Zeile2 \n Zeile3 \n Zeile4 \n Zeile5");
flock($file,3);

Geht das?
Bessere Lösungen?

Und was ist mit LOCK_NB (nummer 4);
wo könnte/müsste/sollte ich das benutzen?

mfg

  1. Hellihello nubbi,

    immerhin gibt es in PHP5 die Funktion file_get_contents und file_put_contents.

    Mit explode () und "\n" bzw. "\n\r" kannst du aus der Datei dann vielleicht ein Array machen, mit jeder Zeile als einem Eintrag.

    Gruß,

    frankx

    1. Hi,

      ähm ich verstehe nicht ganz?

      Für was brache ich file_get_contents?

      Und wäre das dann etwa die bessere Lösung?

      mfg

      1. Hello,

        Für was brache ich file_get_contents?

        ...um die gesamte Datei in den Arbeitsspeicher zu laden, um sie dann mittendrin manipulieren zu können.

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

        Tom

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

  2. Hello,

    schön, dass Du an das Sperren denkst.
    Es muss aber der geamte Änderungsvorgang gekapselt werden.

    $file=fopen('datei.php');

    flock($file,LOCK_EX);

    wenn Lock erfolgreich

    Daten auslesen

    Daten ändern

    Satzzeiger neu positionieren

    Daten zurückschreiben

    Datei schließen und damit gleichzeitig entsprerren

    Bei Textdateien ist es schwierig, am Anfang oder in der Mitte der Datei genau eine "Zeile" auszutauschen, da die Länge der Daten genau eingehalten werden muss.

    Dazu muss man dann i.d.R. die geamte Textdatei umkopieren, was natürlich unwirtschaftlich ist.
    Entweder, man organisiert seine Dateien gleich als "Random Access", also Dateien mit mindestens gleicher Satzlänge, oder man benötigt ein spezielles Zugriffssystem (BTREE oder ähnlich) für den effektiven Zugriff.

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

    Tom

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

    1. Hellihello Tom,

      Entweder, man organisiert seine Dateien gleich als "Random Access", also Dateien mit mindestens gleicher Satzlänge, oder man benötigt ein spezielles Zugriffssystem (BTREE oder ähnlich) für den effektiven Zugriff.

      Und wie steht das im Zusammenhang mit PHPs serialize()? Ergänzung, Alternative, anderer Ansatz?

      Dank und Gruß,

      frankx

      1. Hello,

        Und wie steht das im Zusammenhang mit PHPs serialize()? Ergänzung, Alternative, anderer Ansatz?

        Das erfordert leider auch ein komplettes Einlesen der Datei, ist aber bei vielen Einzelwerten, die zusammen nicht mehr als max. 1MB ergeben, bei üblichen Systemen eine praktikable Lösung. Dazu hatten wir schon mal einen etwas intensivren Thread :-)

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

        Tom

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

        1. Hello,

          [...]

          die schnellere Lösung ist "Random Access".

          Hierzu gibt es ein Beispiel unter http://selfhtml.bitworks.de -> Adressverwaltung

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

          Tom

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