Tim: php in variable

hallo, ich habe nochmal eine frage an des sehr hilfreiche forum...

ich speichere folgenden php code in einer variable:

<?PHP if ($_SESSION["loginstat"] == "1"){?>&nbsp;&nbsp;IP:&nbsp;127.0.0.1<?PHP } ?>

habe das $ schon escaped.
wenn ich die variable mit echo $variable ausgebe wir der php code im quelltext mit einer anderen farbe einfach angezeigt aber nicht verarbeitet.
wie kann ich das problem lösen?
habe schon mal was von eval() gehört aber auch das es nicht das beste ist.

MfG Tim

  1. Hallo Tim!

    ich speichere folgenden php code in einer variable:

    <?PHP if ($_SESSION["loginstat"] == "1"){?>&nbsp;&nbsp;IP:&nbsp;127.0.0.1<?PHP } ?>

    Das ist ziemlicher Murks.
    Wie wär es mit

      
    <?PHP  
        if($_SESSION['loginstat'] === 1) echo "&nbsp;&nbsp;IP:&nbsp;127.0.0.1";  
    ?>  
    
    

    habe das $ schon escaped.

    Ja, wozu eigentlich?
    Wie sieht die Übergabe des Codes an die Variable denn aus?
    Du postest ja nur den Code der in die Variable soll.
    Und soll der Code ausgeführt werden? Oder nur dargestellt?

    wenn ich die variable mit echo $variable ausgebe wir der php code im quelltext mit einer anderen farbe einfach angezeigt aber nicht verarbeitet.

    Richtig, dafür ist echo() da.

    wie kann ich das problem lösen?

    Du speicherst den Code in eine externe Datei. Also eine leere Datei in der nur genau der PHP-Code innerhalb von <?PHP und ?> steht.
    Den "lädst" du mit include() dorthin wo du sie brauchst.

    habe schon mal was von eval() gehört aber auch das es nicht das beste ist.

    Richtig, eval() ist in 99,9% der Fälle die falsche Wahl.

    Grüße, Matze

    1. Hallo,

      Richtig, eval() ist in 99,9% der Fälle die falsche Wahl.

      was ist den an eval() so schlimm? es hat niemand die fähigkeit den code zu ändern also durch eingaben da er automatisch generiert wird und wie zu sehen ist nur die ip enthält.

      MfG Tim

      1. Mahlzeit Tim,

        was ist den an eval() so schlimm?

        Alles. Es führt Code aus, der sich u.U. aus variablen Teilen zusammensetzt und den keiner wirklich kontrollieren kann.

        es hat niemand die fähigkeit den code zu ändern also durch eingaben da er automatisch generiert wird und wie zu sehen ist nur die ip enthält.

        Wenn der Inhalt der Variablen automatisch generiert wird: wieso steht da dann nicht nur die IP-Adresse drin? Du kannst doch bei der Generierung des Inhalts ggf. Bedingungen überprüfen.

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. Hello,

          was ist den an eval() so schlimm?

          Alles. Es führt Code aus, der sich u.U. aus variablen Teilen zusammensetzt und den keiner wirklich kontrollieren kann.

          Das ist vollkommener Unsinn.
          eval() wird ja nicht von alleine tätig, genauso wenig wie ein include() oder require().

          Es liegt einzig und alleine in der Verantwortung des Programmierers, ob das böse enden kann.

          Liebe Grüße aus Syburg bei Dortmund

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Mahlzeit Tom,

            Alles. Es führt Code aus, der sich u.U. aus variablen Teilen zusammensetzt und den keiner wirklich kontrollieren kann.

            Das ist vollkommener Unsinn.

            Nein. Nicht, wenn der auszuführende Code aus variablen Stückchen zusammengesetzt wird, die aus irgendwelchen Quellen stammen, die der Programmierer zum Zeitpunkt der Code-Erstellung nicht kennt oder kontrollieren kann.

            eval() wird ja nicht von alleine tätig, genauso wenig wie ein include() oder require().

            Sicher.

            Es liegt einzig und alleine in der Verantwortung des Programmierers, ob das böse enden kann.

            Sicher. Aber da viel zu oft viel zu verantwortungslos mit eval() und seinen Brüdern und Schwestern umgegangen wird, ist es absolut legitim, gerade noch nicht so erfahrenen Menschen vom Umgang damit kategorisch abzuraten bzw. zu empfehlen, einen Weg zu suchen, bei dem man eval() NICHT benötigt - dieser ist im Regelfall deutlich sicherer und vernünftiger als die Benutzung von eval().

            MfG,
            EKKi

            --
            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
            1. Hi!

              Alles. Es führt Code aus, der sich u.U. aus variablen Teilen zusammensetzt und den keiner wirklich kontrollieren kann.

              Das ist vollkommener Unsinn.

              Nein. Nicht, wenn der auszuführende Code aus variablen Stückchen zusammengesetzt wird, die aus irgendwelchen Quellen stammen, die der Programmierer zum Zeitpunkt der Code-Erstellung nicht kennt oder kontrollieren kann.

              Deshalb obliegt es ja dem Programmierer, sicher zu stellen das so etwas nicht passiert - die Benutzung von eval() kann durchaus ins Auge gehen das ist klar!

              Auch hier gilt wie immer: jeder nicht validierte Input ist böse!

              off:PP

              --
              "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
  2. Hello Tim,

    ich speichere folgenden php code in einer variable:

    <?PHP if ($_SESSION["loginstat"] == "1"){?>&nbsp;&nbsp;IP:&nbsp;127.0.0.1<?PHP } ?>

    habe das $ schon escaped.
    wenn ich die variable mit echo $variable ausgebe wir der php code im quelltext mit einer anderen farbe einfach angezeigt aber nicht verarbeitet.

    wie kann ich das problem lösen?
    habe schon mal was von eval() gehört aber auch das es nicht das beste ist.

    Ich lasse es jetzt mal, über eval() abzulästern und Dich nach dem Sinn der Sache zu fragen.

    Aber für eval() sind die Tags von PHP genau verkehrt herum, da eval() einen gültigen PHP-Code erwartet, Du dort aber im Prinzip einen gültigen HTML-Code stehen hast.

    Entweder, du speicherst das gleich anders herum in Deiner Variablen,

    $code = "if ($_SESSION['loginstat'] == '1') { echo "&nbsp;&nbsp;IP:&nbsp;127.0.0.1"; }";

    oder aber du schreibst Dir eine Funktion, die die PHP-Tags invertiert, also aus einem öffnenden Tag einen schließenden macht und umgekehrt. Das wird aber gar nicht so einfach, weil diejenigen innerhalb von Strings i.d.R. nicht invertiert werden dürfen.

    Da so eine Funktion aber allgemein sehr nützlich sein könnte, wenn man mit Dateien und eval() arbeiten will, sollte man sich vielleicht mal damit beschäftigen.

    Liebe Grüße aus Syburg bei Dortmund

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hello,

      Aber für eval() sind die Tags von PHP genau verkehrt herum, da eval() einen gültigen PHP-Code erwartet, Du dort aber im Prinzip einen gültigen HTML-Code stehen hast.

      Entweder, du speicherst das gleich anders herum in Deiner Variablen,

      $code = "if ($_SESSION['loginstat'] == '1') { echo "&nbsp;&nbsp;IP:&nbsp;127.0.0.1"; }";

      oder aber du schreibst Dir eine Funktion, die die PHP-Tags invertiert, also aus einem öffnenden Tag einen schließenden macht und umgekehrt. Das wird aber gar nicht so einfach, weil diejenigen innerhalb von Strings i.d.R. nicht invertiert werden dürfen.

      Das mit dem "Invertieren" ist ja noch ganz andern, denn wenn man genauer darüber nachdenkt, darf ja aus einem "<?php" kein "?>" werden, sondern gar nichts, und aus einem "{?>" kein "{<?php", sondern ein "{ echo ", usw.

      Vielleicht finden sich noch ein paar Mitdenker? Würde vereinfacht ein

      $file = file_get_contents(<php-file.php>);
         $_search = array('<?php','?>');
         $_replace = array('',' echo ');
         $code = str_ireplace($_search, $_replace, $file);

      reichen, um aus einem "normalen" PHP-File einen für eval() brauchbaren Ausdruck zu machen?

      Liebe Grüße aus Syburg bei Dortmund

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Mahlzeit Tom,

        Vielleicht finden sich noch ein paar Mitdenker?

        Öhm, nein.

        Allein, wenn ich mir anschaue, was in der Variablen drin steht

        <?PHP if ($_SESSION["loginstat"] == "1"){?>&nbsp;&nbsp;IP:&nbsp;127.0.0.1<?PHP } ?>

        dann behaupte ich einfach mal, dass das Problem von Tim nicht ist, wie er diesen in einer Variablen gespeicherten String, der HTML inklusive PHP-Tags und eingebettetem PHP-Code enthält, ausführen kann ...

        ... sondern dass er schlicht und ergreifend auf Basis eines in einer Session gespeicherten Werts einen wo und wie auch immer gespeicherten String (die IP-Adresse) ausgeben will - und DAFÜR eignet sich eine entsprechende Funktion, die an den gewünschten Stellen aufgerufen wird, deutlich besser (als an diesen Stellen einen - vollkommen ungeeigneten - Codeschnipsel per eval() auszuführen).

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|