PHP: Array in Datei speichern



  • Hallo miteinander,

    ich habe ein kleines PHP-Skript indem ich eine .php datei auslesen und nach Bearbeitung wieder speichern will. Die Datei soll in einem Array gespeichert werden.

    if($HTMLFile = fopen($Filename,"r")) {
        while(!feof($HTMLFile)) {
            $EditFileLine = fgets($HTMLFile); // Zeile in Variable
            $aEditFile[] = array($EditFileLine); // Zeile in Array (?)
    
            echo ($EditFileLine); // reine Ausgabe der Zeilenvariable
        }
        fclose($HTMLFile);
    }
    

    nach der Bearbeitung soll das ganze wieder an anderer Stelle im Code gespeichert werden (hier vorab in eine Testdatei):

    if(isset($_POST['save'])) { // Wenn Button Save gedrückt
        if($HTMLFileSave = fopen("testfile.txt","w")) {
            for($n = 0 ; $n < count($aEditFile); $n++) {
    	    fputs($HTMLFileSave,$aEditFile[n]); // Füge Array Zeile "n" zur Datei hinzu
    	}
    	fclose($HTMLFileSave);
        }	
    }
    

    Nur kommt leider nichts am Ende heraus. Die Datei bleibt Leer 😞 Bin programmiertechnisch kein Anfänger, jedoch schreibe ich selten in PHP. Ist der Umgang mit den Arrays falsch?! Hab schon so gut wie alles probiert was mir einfiel, bitte um Hilfe! 😕 🙂

    lg
    Onfängä



  • Was steht denn im "Save"-Fall in $aEditFile?



  • Dasd schrieb:

    Was steht denn im "Save"-Fall in $aEditFile?

    meinst Du das?

    $aEditFile[] = array($EditFileLine);
    

    Hier soll Zeile für Zeile in den Array gespeichert werden.



  • Machs so:

    foreach($arr as $key => $value){
    fwrite($fp,$value);
    }
    

    DerOnfängä schrieb:

    Dasd schrieb:

    Was steht denn im "Save"-Fall in $aEditFile?

    meinst Du das?

    $aEditFile[] = array($EditFileLine);
    

    Hier soll Zeile für Zeile in den Array gespeichert werden.

    ich glaube er meint du sollst es mal mit var_dump() oder so ausgeben lassen.



  • PRIEST schrieb:

    Machs so:

    foreach($arr as $key => $value){
    fwrite($fp,$value);
    }
    

    DerOnfängä schrieb:

    Dasd schrieb:

    Was steht denn im "Save"-Fall in $aEditFile?

    meinst Du das?

    $aEditFile[] = array($EditFileLine);
    

    Hier soll Zeile für Zeile in den Array gespeichert werden.

    ich glaube er meint du sollst es mal mit var_dump() oder so ausgeben lassen.

    Hö? Also bei den Arrays in PHP bin ich noch nicht durchgestiegen, ich kenne das nur so:

    foreach($arr as value){ fwrite(fp,$value);
    }

    Das hatte ich nämlich schon probiert und einen Error erhalten.. anscheinend unterscheidet sich die Array handhabung in PHP erheblich von anderen Sprachen, muss ich mich nochmal einlesen. 😕

    Den Befehl var_dump() kannte ich bis gerade eben auch noch nicht, hab immer wild "echos" losgelassen, Danke! Werd ich später mal ausprobieren und anschließend posten was ich in Erfahrung gebracht habe. 🙂



  • 🙂

    was kommt denn für ein error?

    Naja das mit dem $key in der foreach ist halt schön weil du dann sozusagen eine zählervariable hast die du verwenden kannst.

    Kannst dir das so vorstellen:

    reset($arr);
    while (list($key, $value) = each($arr)) {
        echo "Zähler: $key; Wert: $value<br />\n";
    }
    

    Edit::
    Empfielt sich immer die php.net page zu besuchen :)! Steht alles schön erklärt.
    http://de3.php.net/manual/de/control-structures.foreach.php
    http://de3.php.net/manual/de/book.array.php



  • DerOnfängä schrieb:

    for($n = 0 ; $n < count($aEditFile); $n++) {
    

    das auf jeden fall schöner weil schneller. allerdings solltest du das count() "cachen" also so ungefähr:

    for($n = 0,$l = count($aEditFile); $n < $l; $n++) {
    

    lg lolo



  • axo mir fällt gerade ein, das es evtl. auch mit einem

    file_put_contents("filename.php", implode("\n",$aEditFile));
    

    klappen könnte. das sollte schon mehr oder weniger das schnellste sein 😉

    lg lolo



  • Aaaalso, ik hab dat janze nochma probiert.

    Ich muss sagen ich versteh es nicht, der Fehler liegt wohl in folgendem Codeausschnitt:

    while(!feof($HTMLFile)) {
        $EditFileLine = fgets($HTMLFile);
        $aEditFile[] = $EditFileLine;
        echo ($EditFileLine);
        var_dump($aEditFile[ii]);
        $ii++;
    }
    

    Var_Dump gibt immer NULL aus, aber wieso?? 😕 "echo(EditFileLine)" gibt die korrekte Zeile aus der Datei aus die zuvor mit fgets eingelesen wird, und darunter hänge ich ja mit der Zeile "aEditFile[] = $EditFileLine;" das ganze an den Array.

    Entschuldigung für die komische Namensvergabe bei den Variablen, bin da nicht sehr kreativ. 🙄

    Danke für die bisherigen Verbesserungen 👍

    Gruß



  • Der Array-Index sollte $ii sein.

    Aber warum nimmst du nicht gleich file(...)?
    http://www.php.net/manual/de/function.file.php


Anmelden zum Antworten