Simone: auslesen von Variablen aus einer Textdatei

Hi,
Ich war schon lange nicht mehr hier.

Mein Problem ist folgendes:

ich erstelle eine Navigations-Datei(.csv Format) mit Variablen und Werten
..................
$head_nav_datei[0]        ="h1.php";
$head_nav_datei[1]        ="h2.php";
$head_nav_datei[2]        ="h3.php";
$head_nav[0]        ="*Nr.1*";
$head_nav[1]        ="*Nr.2*";
$head_nav[2]        ="*Nr.3*";
..................

das auslesen mach ich so:

$csv = "$path/navigations.csv";
$lines = file($csv);
  for($i = 0; $i <= count($lines); $i++)
  {
      echo $lines[$i];
  }

Aber wie kann ich diese Elemente so nutzen um sie in einer entsprechende Funktion wieder einzubauen?

d.H.

$head_nav_datei[0]        ="h1.php";
$head_nav_datei[1]        ="h2.php";
$head_nav_datei[2]        ="h3.php";
$head_nav[0]        ="*Nr.1*";
$head_nav[1]        ="*Nr.2*";
$head_nav[2]        ="*Nr.3*";

Variable und Wert sollen wieder vorhanden sein.
bzw. für die Funktion zur Verfügung stehen.

Es ist garnicht so leicht das zu erklären was man  will
Ich hoffe Ihr habt' mich verstanden.

Simone

  1. hi,
    also vorausgesetzt du hast folgendes textfile mit variablen:
    #-------------------------------------------------------
    #this is a TXTfile
    #alle words in front of the '=' will get to $Variables
    #and all words behind the '=' will get their values
    name = christopher
    alter = 21
    ort = berlin #versteckter text
    farbe = schwarz
    #-------------------------------------------------------
    dann geht folgende funktion:
    <?
    // hier textfile angeben:
    $ro_txtfile = "txtfile.txt";

    // verzechnishandle wird geöffnet
    $verz=@fopen($ro_txtfile,"r");
    while (!feof($verz))
    {
     // jede reihe wird ausgelesen
     $row = @fgets($verz, 4096);

    // kommentare am reihenanfang ausfiltern
     if(substr(trim($row),0,1)!="#") {

    // kommentare am reihenende abschneiden
       if(strchr($row,"#")) {
         $posComment = strpos($row,"#");
         $row = substr($row,0,$posComment);
       }

    // key und value definieren
       $row = explode("=",$row);

    //  ergebnisse in array speichern
       $txtfile[trim($row[0])] = trim($row[1]);
     }
    }
    // verzeichnishandle schließen
    fclose ($verz);

    // e.g.output
    echo $txtfile[farbe];
    ?>

    in diesem fall werden alle zeichen hinter # ignoriert, alle anderen übernommen...
    HIH

    mfg
    comunicout

    1. Simone

      Dank Dir für Deine Antwort !

      Simone

  2. Greetings!

    Also:

    1. Warum nimmst du kein Include-File ( *.inc ) und schreibst da alle Variablen mit Werten rein ( natürlich PHP-konform ) und includierst das dann in einem PHP-File

    require_once( "Navigationfile.inc" );

    Dann kannst du auf die Variablen wieder zugreifen!.

    Eine andere Möglichkeit wäre ( wenn es nicht anders geht, als du beschrieben hast ), jede eingelesene Zeile, die du in deinem Beispiel mit echo ausgibts, zu evaluieren.

    $csv = "$path/navigations.csv";
    $lines = file($csv);
      for($i = 0; $i <= count($lines); $i++)
      {
          eval( $lines[$i] );
      }

    Jetzt kannst du auf jede Variable zugreifen.
    Eval macht nichts weiter als einen String in richtigen PHP-Code zu wandeln.

    Beispiel:

    eval( "echo( 'hallo' );" ); würde "hallo" an den Browser zurücksenden, als hättest du statt dessen echo "hallo" geschrieben.

    1. Hi
      Include geht leider nicht!

      Die Menüfunktion soll ohne eindeutigen Path funktionieren.
      Praktisch egal welche Unterverzeichniss es sein wird

      Aber das geht!

      $lines = file($csv);
        for($i = 0; $i <= count($lines); $i++)
        {
      $variable .=$lines[$i];
        }

      eval( "$variable" );

      Danke für die schnelle Antwort !!!

      Simone

  3. Hallo Selferin,

    wieso machst Du Dir das Leben so schwer? Nimm doch serialize() und unserialize(). Dann gibts kein Problem mehr mit den Variablen.

    Leider unterstützt PHP keine festen Satzformate, sodass man sich einfach ein Rrandom-Access-File aufbauen könnte. Da könnte man dann nämlich auch einzelne Werte im File ersetzen, ohne alles einlesen zu müssen.

    Grüße

    Chris (C)