Dominik Pich: Siehe string als php

Ich habe in meiner homepage einen string, den ich aus einer Datei lese, der PHP code enthalten kann. Wie kann ich php dazu bewegen, den inhalt der Datei, den ich innen String lese, zu parsen?

$strContent = $oFile->get_Contents();
//parse not just echo

DANKE!
Dominik

  1. Hallo Dominik.

    So sollte es gehen:

    ob_start(); // Startet das Puffern der Ausgaben
    include($file);
    $strContent = ob_get_clean(); // Beendet Puffern und gibt gepufferte Daten zurück

    MfG _Siro

    1. ... mmmmmmmhhh... will nich

  2. $strContent = $oFile->get_Contents();

    ne bööööse function
    http://de2.php.net/manual/de/function.eval.php

    mach doch einfach
    include($file.".php3") und dann hat sich die sache, wenne weist das es ne php datei ist.

    1. code is html + php...

    2. Hello,

      ne bööööse function
      http://de2.php.net/manual/de/function.eval.php

      Was ist an der Funktion böse?
      Mit include hanieren doch auch immer alle rum.
      Das ist nicht weniger böse.

      Nur die Quelle muss vertrauenswürdig sein.
      Eval() wird nur dadurch böse, wenn man das Argument aus nicht bösen Quellen füllt.

      in der Datei steht z.B.

      $vorname $nachname wohnt in $ort

      $dateiinhalt = file_get_contents(Dateiname);
      eval("$str = "$dateinhalt";");

      echo $str;

      Man beachte, dass eval() keine Funktion ist, sondern ein Sprachkonstrukt des Parsers. Der Rückgabewert hat nicht direkt etwas mit der Evaluation zu tun, sondern wird durch ein "return $wert;" innerhalb des Eval() erzeugt. Die Valuation wird am Return sofort abgebrochen.

      Das Argument von Eval muss nach einmaliger Demaskierung und Ersetzung gültigen PHP-Code ergeben.

      In unserem Beispiel von oben würde dann im Script stehen

      $str = "$vorname $nachname wohnt in $ort";

      Nachdem eval das Argument demaskiert hat, setzt es den Befehlszeiger des Scriptes auf den Anfang der demaskierten Zeile. Es ist nun ganz offensichtlich, dass die Variablen $vorname, $nachname und $ort zu diesem Zeitpunkt bekannt sein müssen. Sonst gibt es eine Warnung, wenn "error_reporting(E_ALL);" gesetzt ist. Und das sollte es zum Testen auf jeden Fall!

      Die Variablen stehen nach dem eval() auch weiterhin im Script zur Verfügung.

      Man sollte daher das eval() iner einer Funktion mit genau festgelegtem NameSpace kapseln, damit nicht aus Versehen eingeschleppte Variablen diejenigen aus dem Script überschreiben, ohne dass man das will.

      Die Funktion würde dann z.B. so aussehen

      function safe_eval($value, &$str, $vorname, $nachname, $ort)
      {
        @eval("$str = "$value";")
        if(empty($php_errormsg)) return true;
        return false;
      }

      Aufruf:

      $str='';
      $vorname='Hans';
      $nachname='Hustenbacks';
      $ort='Hannover';

      if (safe_eval($value, $str, $vorname, $nachname, $ort)) echo $str;

      So kann eval auf nichts anderes zugreifen, als erlaubt ist. Allerdings stehen die globalen Arrays auch in safe_eval() zur Verfügung.

      und nochmal als ganzes Script

      <?php ### safe_eval.php ###

      error_reporting(E_ALL);

      #-----------------------------------------------------------
      function safe_eval($value, &$str, $vorname, $nachname, $ort)
      {
        @eval("$str = "$value";");
        if (empty($php_errormsg))
        {
          return true;
        }
        else
        {
          return false;
        }
      }
      #------------------------------------------------------------

      #Aufruf:

      $value = '$vorname $nachname wohnt in $ort';
      $str='';
      $vorname='Hans';
      $nachname='Hustenbacks';
      $ort='Hannover';

      if (safe_eval($value, $str, $vorname, $nachname, $ort)) echo $str;

      ?>

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. na die function ist nicht böse da haste recht *g*
        aber durch die unerfahrenheit mancher user wird das dingen zu nem dicken problem.

        soviel ich weis oder glaube ich wird/wurde doch auch in phpnuke
        eval eingesetzt.

        und wir wissen ja alle wieviel foren es mitlerweile gibt wo es das thema gibt "hilfe meine seite wurde gehackt"

        ich kenne so einige internet seiten
        wo man auch solche parameter übergeben kann.

        *.php?site=http://www.domain.de/test.txt

        oder folgendes beispiel..
        PHP besitzt die Möglichkeit, mittels eval()[5] dynamischen
          Code auszuführen. Beispiel: anstatt

        echo "dies ist ein Text";

        könnte man auch schreiben

        eval("echo "dies ist ein Text";\n");

        Würde hier jedoch stehen

        eval($txt);

        und wäre $txt z.B. der Inhalt der anzuzeigenden E-Mail,
          so könnte in der Variablen $txt böser Code enthalten sein,
          der zum Beispiel Passwörter ausspäht, Dateien auf dem
          Server löscht etc.