EVAL FUNKTION ?



  • komisch ist aber dass er zwar die richtige datei benutzt aber die variablen immer gleich bleiben!

    index.php:
    <?php
    if(site=="kontakt") { include("includes/kontakt.php"); file = implode('',file('templates/Main.tpl'));
    id=.md5(uniqid(rand())).;id = '|'.md5(uniqid(rand())).'|'; file = str_replace('"',id,id,file);
    eval ('file=".file = "'.file.'";');
    file=strreplace(file = str_replace(id,'"',$file);
    echo $file;
    }

    if(site=="startseite") { include("includes/startseite.php"); file = implode('',file('templates/Main.tpl'));
    id=.md5(uniqid(rand())).;id = '|'.md5(uniqid(rand())).'|'; file = str_replace('"',id,id,file);
    eval ('file=".file = "'.file.'";');
    file=strreplace(file = str_replace(id,'"',$file);
    echo $file;
    }
    ?>

    egal ob site startseite oder kontakt ist es ändert sich nichts - hat jemand den fehler gesehen ?

    lohnt es sich überhaupt das so zu realisieren - gibt es da andere/bessere möglichkeiten ?

    grüße.



  • Ich habe mich nochmal hingesetzt und eine alternative geschrieben:

    <?php
    include("includes/startseite.php");
    
    function GetTemplate($TplFile)
    {
    return str_replace("\"","\\\"",implode("",file($TplFile)));
    }
    
    function DoOutput($TplFile) 
    {
    echo $TplFile;
    }
    eval ("DoOutput(\"".GetTemplate("templates/Main.tpl")."\");");
    ?>
    

    Aber die komische Sache bleibt ! Kann es sein das der Server den Inhalt der Variablen noch im Speicher hat denn wenn ich includes/startseite.php veränder kommen immer noch die alten Sachen.



  • Wenn du so gut suchen könntest, wie du kopieren kannst, hättest du mal auf die Website des Urhebers geschaut:

    http://www.woltlab.info/de/forum/thread.php?threadid=18867
    http://www.woltlab.info/de/forum/thread.php?threadid=18021

    Machmal frage ich mich warum ich so sozial bin.



  • Der Fehler liegt nicht am Skript. Dein Browser(bestimmt der IE - der Mozilla ist so blöd nicht) legt die Seite in seinem Zwischenspeicher ab, und läd sie aus dem Zwischenspeicher und nicht neu.
    Es gibt aber einen Headerbefehl, der das unterbindet. Da musst du mal bei Google suchen.

    Edit:
    Ich würde die Templates nicht so einlesen wie du das machst. Das ist nämlich relativ lahm. fread() währe bedeutend schneller. (Ich habs mit einer 700mb großen Textdatei ausprobiert: implode(file()): timeout; fread(): 3sek;)



  • @ Wenn du so gut suchen könntest, wie du kopieren kannst, hättest du mal auf die Website des Urhebers geschaut

    Ja natürlich habe ich das kopiert aber ich wollte es doch eben für mich anpassen !

    @ Der Fehler liegt nicht am Skript. Dein Browser(bestimmt der IE - der Mozilla ist so blöd nicht) legt die Seite in seinem Zwischenspeicher ab, und läd sie aus dem Zwischenspeicher und nicht neu.

    Nein leider nicht! Ich benutze auch nicht den IE sondern Safari auf Mac OS X - und dann habe ich es auf einem anderen Computer ausprobiert und da taucht der gleiche Fehler auf --> ich habe auch keinen ProxyServer davor !!



  • Ich verstehe jetzt nichts mehr!

    index.php:
    <?PHP
    include("includes/startseite.php");
    include("templates/main.php");
    ?>

    includes/startseite.php:
    <?PHP
    $TITEL = "Hallo";
    ?>

    templates/main.php:
    <?PHP
    echo('<html><head><titel>'.$TITEL.'</titel></head></html>');
    ?>

    UND trotzdem steht in der variablen $TITEL noch der titel von gestern abend obwohl ich alles gelöscht habe ... sogar auf anderen computern in diesem netz. habe mir auch schon einen neue ip geben lassen.
    kann das was mit dem webserver zu tun haben ?



  • So ich habs. Was für ein Dicker Dummer Fehler. Lag an etwas anderem.

    Wen es interessiert hier ist eine Lösung:

    <?PHP
    
    		if($site == "startseite")
    		include("includes/startseite.php");
    
    		if($site == "kontakt")
    		include("includes/angebote.php");
    
    		else
    		include("includes/startseite.php");
    
    		function GetTemplate($TplFile)
    		{
    			return str_replace("\"","\\\"",implode("",file($TplFile)));
    		}
    
    		function DoOutput($TplFile) 
    		{
    			echo $TplFile;
    		}
    
    		eval ("DoOutput(\"".GetTemplate("templates/Main.tpl")."\");");
    ?>
    

    -- Über Verbesserungen würde ich micht natürlich freuen.

    Grüße.



  • DieLösung(Man^2) schrieb:

    <?PHP
        if($site == "startseite")
        include("includes/startseite.php");
    
        if($site == "kontakt")
        include("includes/angebote.php");
    
        else
        include("includes/startseite.php");
    ?>
    

    Dein if-else-syntax ist sehr gefährlich! In diesem Fall kannst du dir auf jeden Fall das erste if sparen 😉

    Lösung: entweder mit elseif oder mit verschachtelten if-else
    (ich würde dir auch { } empfehlen, um die Sachen eindeutig zuzuordnen - ist bei komplexem Code viel übersichtlicher)
    Hier würde ich aber ein switch bevorzugen:

    <?php
        switch($site)
        {
            case 'startseite':
                include("includes/startseite.php");
                break;
            case 'kontakt':
                include("includes/angebote.php");
                break;
            default:
                include("includes/startseite.php");
                break;
        }
    ?>
    

    Falls dein $site direkt aus dem Wert der URL stammt (register_globals uaf on): Nimm lieber $_GET['site'] (ab PHP >= 4.1.0) da register_globals bei neuen Versionen und bei vielen WebServern defaultmäßig auf off eingestellt ist



  • Hallo.
    Wen es interessiert ich habe es jetzt so gemacht:

    <?PHP
    
    	if(file_exists("includes/".$msite.".php"))
    	{
    		include("includes/".$msite.".php");
    	}
    
    	else
    	{
    	include("includes/startseite.php);
    	}
    
    		function GetTemplate($TplFile)
    		{
    			return str_replace("\"","\\\"",implode("",file($TplFile)));
    		}
    
    		function DoOutput($TplFile) 
    		{
    			echo $TplFile;
    		}
    
    		eval ("DoOutput(\"".GetTemplate("templates/20030810.tpl")."\");");
    
    ?>
    

    Er meldet mir nun zwar den Fehler:

    Warning:  Unexpected character in input:  '\' (ASCII=92) state=1 in index.php on line 14
    

    Aber ich denke das bekomme ich auch nor hin!

    Über weitere Kommentare würde ich mich freuen ....

    Grüße.



  • PS:
    Wenn das alles so funktioniert werde ich mich mit dem Komantar von Lutz beschäftigen:

    Edit:
    Ich würde die Templates nicht so einlesen wie du das machst. Das ist nämlich relativ lahm. fread() währe bedeutend schneller. (Ich habs mit einer 700mb großen Textdatei ausprobiert: implode(file()): timeout; fread(): 3sek;)

    Grüsse.



  • buffer=addslashes(file_get_contents(DeineDatei.ext));buffer=addslashes(file\_get\_contents('DeineDatei.ext')); result=eval('return "'.$buffer.'";');

    Gruß Jens



  • Ich habe das ja jetzt mit dem include("includes/startseite.php") Befehl gelöst!

    Ich benutze Ihn in vielen Dateien um mehr Übersicht zu haben und um später einfacher (globaler) Änderungen vornehmen zu können.

    Wie sieht es denn mit der Geschwindigkeit aus. Ist das include(); ok oder langsam ?



  • Das ist schon ok


Anmelden zum Antworten