[PHP] - Mehrfach in Datei schreiben, neuste aber am ANFANG!



  • Folgender Code SOLLTE das NEUE hinzugefügte am anfang der Datei schreiben. und das schon vorhanden sollte trotzdem noch in der datei sein.

    zb steht in der datei die zahl 1. wenn jetzt 2 hinzugefügt wird, ist das das neuste, also sollte schlussendlich folgendes drins tehen;:

    2
    1

    etc... doch mit folgendem code passiert überhaupt nix:

    dir = $DOCUMENT_ROOT."/sfdrs/ad_conf/sa/";
    //<-----BACKUP - FILE------>>//
    $f_bg = fopen($dir.'news_sa.txt', "r");
    $dbg = fgets($f_bg);
    $databg = explode("|", $dbg);
    //<-----BACKUP - FILE------>>//
    $file = fopen($dir.'news_sa.txt', "a+");
    $text = bbcode($text);
    $date = date("D, d M Y");
    $date_2 = date(" H:i:s");
    $news= $titel."|".$text."|".$date."|".$date_2."\n\n".$databg[0]."|".$databg[1]."|".$databg[2]."|".$databg[3]."\n\n";
    fwrite($file, $news);
    fclose($file);
    fclose($f_bg);
    

    get_file_Contents gibts ja auch oder file_get_contents. doch das funzt bei mir nich...

    mfg
    Pro



  • ohne auf den code zu schauen:

    du musst einfach die datei öffnen, auslesen in eine variable, das neue concaten mit der variablen:
    $all= variable_neu.variable\_neu.variable_alt_aus_datei;

    und dann alles wieder reinschreiben.



  • Hmm.. das weiss ich eigentlich auch *g*

    Anstatt a+ muss ich ja w+ nehmen, seh ich grad.
    Aber es funzt trotzdem nich. Frag mich net warum....



  • Du öffnest die Datei zweimal direkt hintereinander! Öffne sie doch erst, lese die Daten ausm und schleiße sie dann wieder bevor du sie wieder öffnest 😉



  • flenders schrieb:

    Du öffnest die Datei zweimal direkt hintereinander! Öffne sie doch erst, lese die Daten ausm und schleiße sie dann wieder bevor du sie wieder öffnest 😉

    Sorry, ich habs versucht mit meinem Auslesekenntnissen. Ausgelesen wird, mit echo auch angezeigt, doch wenn ich die Datei schreibe, steht da NIX! 🙂

    Der Code hab ich nicht mehr, weil es mir zu blöd war, da es nicht funktionierte, auch nicht mit der 10te Variante.

    mfg
    DOminic
    PS: Aber ich brauche das:_... *G* 😞 😞



  • Hast du die Datei jetzt vor dem erneuten öffnen (fürs schreiben) geschlossen?



  • So ich hab da mal was für dich.

    //Den Inhalt der Datei in ein Array lesen
    $alter_inhalt=array();
    $alter_inhalt=file("test.txt"); 
    
    //neuen Inhalt definieren
    $neu="2";
    
    //Größe des alten Daten-Arrays ermitteln um am Anfang ein neues Feld zu erzeugen
    $anz = count($alter_inhalt) + 1;
    
    //Array nach links erweiten
    $neuer_inhalt=array_pad($alter_inhalt, -$anz, $neu);
    
    //und dann das neue Array ganz normal in die Datei schreiben
    $anz = count($neuer_inhalt);
    for ($i=0; $i <= $anz; $i++) {fputs($open, "$neuer_inhalt[$i]");}
    fclose($open);
    

    Okay das mit der Schleife ist vielleicht nich die beste Lösung aber es funzt so. Die einzelnen Strings werden aber hintereinander in die Datei geschrieben und nicht je in eine neue Zeile. Hatte keine Lust mehr mir da drüber noch nen Kopf zu machen. Ich hoffe es hilft dir.



  • Ist das nicht bissl umständlich 🙄 - im Prinzip sollte es ja eigentlich klappen, wenn er vor dem 2. fopen die Datei per fclose erstmal schließt bzw. das Einlesen gleich (wie in deinem Beispiel) per file() o.ä. macht 🙂



  • Ja sicher iss das nich die effektivste Lösung, aber es war ja auch schon halb 3.
    Naja gut Entschuldigungen helfen da sicher nich viel.
    Ich denke aber, das sein Code mit einem weiteren fclose() nich wirklich funktionieren wird. Wenn er wirklich vor hat den neuen Datensatz in dir erste und den alten in die zweite Zeile der Textdatei zu schreiben, erziehlt er mit seinem Skript nich den gewünschten Effekt(ausser es bleibt bei den 2 Zeilen). Vielleicht hab ich da aber auch nur was missverstanden.



  • Stimmt, hatte seinen Code nicht mehr so ganz in Erinnerung 🙄
    Ich denke am einfachsten wäre es dann wohl (falls die Datei unbeding so aufgebaut sein soll) erst den ganzen Inhalt einzulesen z.B. mit file_get_contents oder eben file. Den Zwischenschritt, das Array zu vergrößern ist aber nicht sehr effizient. Ich würde einfach den neuen String in die jetzt leere Datei schreiben und dann den alten Inhalt unverändert wieder zurückschreiben 🕶


Anmelden zum Antworten