Knud: Datei einlesen und Variablen ersetzen

Hallo,

ich möchte per file() eine Datei einlesen, in  der sich html-code aber auch php-variablen befinden.

Als Test hab ich folgende Datei erstellt:

test.tpl
--------

<hr>$test<hr>

und meine php-Datei sieht so aus:

test.php
--------
<html><body>
<?
$filename = "test.tpl";
$test = "Hello World";
$data = @implode('', (@file($filename)));

echo $data
?>
</body>
</html>

Eigentlich sollte das $test durch ein 'hello world' ersetzt werden.
Macht er aber nicht. Wenn ich $data nicht aus file() fülle sondern "händisch", dann wird $test ersetzt.
Wie kann ich denn php dazu anleiten, es doch zu tun?

Gruß,

Knud

  1. Hoi !

    $filename = "test.tpl";
    $test = "Hello World";
    $data = @implode('', (@file($filename)));

    echo $data

    Warum nicht ganz einfach

    $test = "Hello World";
    $filename = "test.tpl";
    include($filename);

    Das gibt genau den Effekt, den Du haben willst.
    Da sparst Du Dir viel Mühe ...

    Ciao,

    Harry

    1. Hallo!

      Warum nicht ganz einfach

      $test = "Hello World";
      $filename = "test.tpl";
      include($filename);

      Wäre echt supereinfach, wenns funktionieren würde.
      Leider ersetzt er mir die $test immer noch nicht.

      Ich versteh das nicht. Als ich die Datei in eine Variable eingelesen hatte, war ich davon ausgegangen, dass sich der Wert der eingelesenen Variable exakt genauso verhalten würde, wie ein gesetzter Wert.
      Dachte dass,
      $data = file($datei);
      in der einfach <hr>$test<hr> steht, das selbe wäre wie
      $data = "<hr>$test<hr>";

      Jetzt hab ich das mit include gemacht und dachte, dass wäre so, als ob der eingelesene text gar nicht extern liegen würde.
      Aber er machts wieder nicht.

      Wenn ich eval($data); probiere, dann erhalte ich eine Fehlermeldung direkt in der ersten Zeile, keine Ahnung was der bedeuten könnte.
      Aber auf eval würd ich auch lieber verzichten.

      Gruß,

      Knud

      1. Hallo,

        Wäre echt supereinfach, wenns funktionieren würde.
        Leider ersetzt er mir die $test immer noch nicht.

        Wie waere es, wenn du PHP auch zeigst, dass das PHP-Code ist?

        <h1><?php echo $test; ?></h1>

        Ich versteh das nicht. Als ich die Datei in eine Variable
        eingelesen hatte, war ich davon ausgegangen, dass sich der Wert
        der eingelesenen Variable exakt genauso verhalten würde, wie ein
        gesetzter Wert.

        Natuerlich nicht.

        Dachte dass,
        $data = file($datei);
        in der einfach <hr>$test<hr> steht, das selbe wäre wie
        $data = "<hr>$test<hr>";

        Nein, natuerlich nicht. Ein String ist ein String und Code ist Code.

        Jetzt hab ich das mit include gemacht und dachte, dass wäre so,
        als ob der eingelesene text gar nicht extern liegen würde.

        Richtig.

        Aber er machts wieder nicht.

        Siehe oben.

        Gruesse,
         CK

  2. Hoi,

    ich möchte per file() eine Datei einlesen, in  der sich html-code
    aber auch php-variablen befinden.

    Nun, fuer dein 'Problem' gibt es mehrere Ansaetze. Der erste waere,
    Templates zu benutzen. Fuer PHP gibt es sehr umfangreiche und gute
    Template-Bibliotheken (Smarty, FastTemplate, PHPLib, ...). Infos
    dazu kannst du dir sehr leicht 'ergoogeln'.
    Der zweite Ansatz waere 'include'. Was du da oben moechtest, schreit
    geradezu nach Include. Infos zu finden unter
    http://php.net/include.
    Der dritte und IMHO unsauberste Ansatz waere 'eval'. Du liest den
    String wie gewohnt ein und fuehrst ihn ueber eval($data) aus. Das
    sollte theoretisch gehen.

    Der Grund, warum dein obiger Ansatz nicht funktioniert, ist der, dass
    du einen String aus einer Datei einliest. Dass darin Variablen sind,
    die ersetzt werden sollen, weiss PHP natuerlich nicht -- woher auch?

    Gruesse,
     CK