Eval und Function

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Eval und Function

    Hallo!

    Ich will ne function erstellen damit ich html dateien mit eval ausgeben kann..

    So klappt es in der index.php:

    Quellcode

    1. eval("\$logged = \"".str_replace("\"", "\\\"", file_get_contents("html/logged.html"))."\";");
    2. echo $logged;


    Und ich will das ganze nun in eine function packen!

    Damit ich nur noch html("dateiname"); schreiben muss!

    Habs schon z.B so versucht aber klappte nicht:

    Quellcode

    1. function html($filename){
    2. eval("\$filename = \"".str_replace("\"", "\\\"", file_get_contents("html/".$filename.".html"))."\";");
    3. echo $filename;
    4. }


    -------------------------------------

    Hoffe ihr könnt mir helfen!!

    MfG
  • was genau hast du überhaupt vor?
    Dein Ausdruck enthält doch nichts dynamisches - warum benutzt du überhaupt eval?

    wenn du womöglich einfach nur php code innerhalb einer funktion evaluieren willst dann geht das auch mit output buffern:

    Quellcode

    1. function outputFile($filename) {
    2. ob_start();
    3. include($filename);
    4. $content = ob_get_contents();
    5. ob_end_clean();
    6. return $content;
    7. }
  • Hallo! Danke für die hilfe bisher Also..

    Was ich genau machen will:

    1. Inhalt meiner PHP

    Quellcode

    1. $ID = $_SESSION["ID"];
    2. $abfrage = mysql_query("SELECT username, admin FROM `".$prefix."user` WHERE ID = '$ID'");
    3. $db = mysql_fetch_object($abfrage);
    4. $username = $db->username;
    5. $admin = $db->admin;
    6. $userlink = "?module=profile&id=".$ID;
    7. if($admin == "1"){$adminlink = "<a href=\"?module=adminmenu\">Adminmenu</a><br />";}else{$adminlink = '';}
    8. eval("\$logged = \"".str_replace("\"", "\\\"", file_get_contents("html/logged.html"))."\";");
    9. echo $logged;


    2. Inhalt der logged.html:

    Quellcode

    1. Willkommen <a href="$userlink">$username</a>,<br />
    2. <a href="?module=profile&amp;func=edit">Profil Bearbeiten</a><br />
    3. $adminlink
    4. <a href="?module=login&amp;func=logout">Ausloggen</a>


    Ich will jetzt statt dem Code:

    Quellcode

    1. eval("\$logged = \"".str_replace("\"", "\\\"", file_get_contents("html/logged.html"))."\";");
    2. echo $logged;


    Nur noch

    html("logged");

    stehen haben!

    Wenn ich (Funktion ist in einer anderen datei, aber oben includet!:

    Quellcode

    1. function html($filename){
    2. eval("\$filename = \"".str_replace("\"", "\\\"", file_get_contents("html/".$filename.".html"))."\";");
    3. echo $filename;
    4. }


    mache, dann kommt der fehler:

    Notice: Undefined variable: userlink in /srv/www/vhosts/smz-gaming.de/subdomains/portfolio/httpdocs/functions/main.php(18) : eval()'d code on line 1 Notice: Undefined variable: username in /srv/www/vhosts/smz-gaming.de/subdomains/portfolio/httpdocs/functions/main.php(18) : eval()'d code on line 3 Notice: Undefined variable: adminlink in /srv/www/vhosts/smz-gaming.de/subdomains/portfolio/httpdocs/functions/main.php(18) : eval()'d code on line 4


    -------

    Und mit deiner lösung d0nut wird gleich wie beim normalen include einfach die variablen in der html ausgeben wie sie dirnn stehn alsoi es steht dann so:

    Quellcode

    1. Willkommen $username
  • Tja, das Problem ist, dass die Funktion nicht auf die globalen Variablen zugreifen kann - Inline Funktionen wie in C++ kennt PHP auch nicht.

    Bleibt dir nur die saubere Lösung:
    Stelle deinen Code auf eine richtige Template Engine um. Dazu ersetzt du alle "Platzhalter Variablen" indem du sie der Funktion html übergibst.

    Oder die mittelsaubere Lösung (gute Vorbereitung auf die saubere Lösung):
    Du übergibst deiner html Funktion schonmal alle Platzhalter - musst aber an den Templates nichts ändern. Siehe folgender Code

    Quellcode

    1. // aufruf
    2. html('logged', array(
    3. 'admin' => $db->admin,
    4. 'adminlink' => "?module=profile&amp;id=".$ID,
    5. ))
    6. // funktion
    7. function html($filename, array $vars){
    8. extract($vars);
    9. ...