Zeile am Anfang der Datei einfügen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zeile am Anfang der Datei einfügen

    Hallo,

    ich habe folgendes Problem:

    Mit dem nachstehenden Source versuche ich verzweifelt eine Zeile an den Anfang einer Datei einzufügen. Aber jedesmal habe ich nur den neuen Eintrag in der Datei stehen. Die alten Zeilen sind gelöscht. Ich habe schon alle Optionen von fopen(); versucht. Klappt nicht.
    By the way ...
    Im Falle $tree!==1 soll eine bestimmte Stelle in der Datei gesucht und der Eintrag dort geschrieben werden. Dazu habe ich allerdings noch keinen Source, da ich noch am ersten Problem hänge.

    <?
    $pfad="data/";
    $datfile="data.txt";
    $tempfile="data.tmp";
    $zaehler="zaehler.txt";
    $text=nl2br($text);
    setlocale("LC_TIME","ge");
    $datum=strftime("%A, %d. %B %Y um %H:%M Uhr");
    $modus="w+";
    $file=fopen("$pfad$zaehler", r);
    $neuenachricht=fgets($file, 10000);
    $neuenachricht++;
    fclose($file);
    $file=fopen("$pfad$zaehler", w);
    fwrite($file, $neuenachricht);
    fclose($file);
    $eintrag=$neuenachricht."``".$titel."``".$tree."``".$name."````".$datum."``".date(Y)."``".date(z)."\ n";
    echo $eintrag;

    if ($tree==1)
    {
    $temp = fopen ("$pfad$tempfile", 'a'); //Tempdatei wird geöffnet
    $file = fopen ("$pfad$datfile", 'r'); //Das Datfile wird geöffnet
    fwrite ($temp, $eintrag); //Die neue Zeile wird in die Tempdatei geschrieben
    fwrite ($temp, fread ($file, filesize ("$path$datfile"))); //Der Inhalt des Datfile wird in die Tempdatei geschrieben
    fclose ($file);
    fclose ($temp);
    unlink ("$pfad$datfile");
    rename ("$pfad$tempfile", "$pfad$datfile");
    }
    else
    {
    //Hier soll eine Stelle in der Datei gesucht und dort ein Eintrag eingefügt werden.
    }
    ?>

  • #2
    Schau mal in diesem Thread vorbei. Damit solltest Du dein erstes Problem lösen können;-) Beim zweiten Teil ist mir leider nichts brauchbares eingefallen.
    http://www.php-resource.de/forum/sho...?threadid=1816

    Kommentar


    • #3
      wie wärs mit dem einlesen der kompletten Daten als string zB.
      dann kannst du den String beliebig verändern wi du möchtest, und ihn dann wieder in eine Datei schreiben.

      ist doch einen versuch wert, oder?

      mfg andi

      Kommentar


      • #4
        Ich hab es geschafft. Nicht ganz elegant, aber immerhin.

        Zeile am Anfang einfügen (danke swisstrain und kandi44):

        $file = fopen("$pfad$datfile","r+");
        $daten = fread($file,filesize("$pfad$datfile"));
        fclose($file);
        $temp = fopen("$pfad$tempfile", "w+");
        fwrite($temp, "$eintrag\n$daten");
        fclose($temp);
        copy("$pfad$tempfile", "$pfad$datfile");

        Bestimmte Stelle in Datei suchen und Zeile einfügen:

        $file=fopen("$pfad$datfile",r);
        $dateiende=filesize("$pfad$datfile");
        //Dateigröße einlesen
        $zeile=fgets($file,10000);
        $inhalt=split("``", $zeile);
        rewind($file);
        //Zeiger zum Anfang, damit auch die erste Zeile gelesen wird.
        while (!feof($file))
        {
        $zeile=fgets($file,100000);
        $inhalt=split("``", $zeile);
        if ($inhalt[0]==$nachricht)
        {
        $lesezeichen=ftell($file);
        //Ein Lesezeichen an der gesuchten Stelle setzen.
        rewind($file);
        $daten1=fread($file,$lesezeichen);
        //Daten bis zu der gesuchten Zeile (inkl.) einlesen
        $daten2=fread($file,($dateiende-$lesezeichen));
        //Daten nach der gesuchten Zeile einlesen
        }
        }
        fclose($file);
        $file2=fopen("$pfad$datfile","w+");
        fwrite($file2, "$daten1$eintrag\n$daten2");
        //Den ganzen Kram zusammenbauen und ab in die Datei damit
        fclose($file2);

        Danke nochmal an alle Helfer.

        [Editiert von noctua am 31-07-2001 um 16:44]

        Kommentar

        Lädt...
        X