Problem mit eval()
Christian Wansart
- php
Hallo,
Ich schreibe gerade wieder eine kleine Homepage und wollte mal mit Templates etc. erleichtern. Da ich nicht immer die komplette HTML-Datei durchgehen will, wenn ich die Navigation irgendwie ändere, habe ich sie extern in eine HTML-Datei gespeichert.
In der Design Datei habe ich für die Navigation die Variable $navbit reingeschrieben. Diese soll nun wenn das Design geladen ist mit dem Code aus meiner Navigation.HTML ersetzt werden.
Hier ist mein PHP-Code:
[code lang=php]<?php
// * ./front_content.php
// * (c) 2007 by Christian Wansart
// * pfad+dateiname
$filename="front_content.php";
// * Überprüfung ob 'site' übergeben wurde
if(isset($_GET['site'])) $site=$_GET['site'];
else $site="home";
// * Funktion zum lesen von Dateien
function getFile($file) {
$stream=fopen($file,"r");
$content=fread($stream,filesize($file));
fclose($stream);
return $content;
}
// * einlesen der Templates
$design=getFile("design.html");
$navbit=getFile("navigation.html");
// * Umwandlung der Variablen
eval("$design="$design";");
// * Ausgabe der Website
echo $design;
?>[code]
Allerdings steht bei der Ausgabe immer noch $navbit da. Was habe ich falsch gemacht?
Vielen Dank
echo $begrüßung;
// * Funktion zum lesen von Dateien
function getFile($file) {
$stream=fopen($file,"r");
$content=fread($stream,filesize($file));
fclose($stream);
return $content;
}
Diese Funktion beinhaltet keine Fehlerbehandlung. Was ist, wenn $file nicht existiert?
Außerdem ist es im Prinzip nicht nötig, file_get_contents() nachzubauen :-)
// * einlesen der Templates
$design=getFile("design.html");
$navbit=getFile("navigation.html");// * Umwandlung der Variablen
eval("$design="$design";");// * Ausgabe der Website
echo $design;
Allerdings steht bei der Ausgabe immer noch $navbit da. Was habe ich falsch gemacht?
Zum Nachstellen des Problems verwendete ich dieses Codeschnipselchen:
$design = 'text $navbit mehr text';
$navbit = 'navigation';
eval("\$design=\"$design\";");
echo $design;
Damit trat der von dir beschriebene Fehler nicht auf.
Ich kann dir deshalb nur allgemein raten, die Variableninhalte und Ergebnisse von Ausdrücken zu prüfen. Du könntest auch das zu Evaluierende in einem String zusammenbauen, diesen zur Kontrolle ausgeben und dan evaluieren lassen.
Abgesehen davon kannst du eval() vermeiden, wenn du einen eindeutigen Platzhalter für die Navigation einfügst und diesen dann mittels str_replace() durch die eigentliche Navigation ersetzt.
echo "$verabschiedung $name";
Vielen Dank für die Antwort,
nur leider verstehe ich den Fehler immernoch nicht.
Inhalt in der Variable $navbit existierte ja. Und diese Variable war als Text in meiner design Datei gespeichert. Ich wollte mir das ganze nur halt noch einfacher machen, indem ich die Variablen automatisch ersetzen lasse, und mir die Zeilen mit dem str_replace() ersparen kann.
Nun habe ich das mal mit str_replace() geschrieben und es funktioniert, aber das mit eval()? Nichts zu machen. Ich kann den Fehler irgendwie nicht sehen, obwohl ich sowas schon einmal gemacht hatte.
Danke
Gruß, Christian Wansart