eval
Wertet eine Zeichenkette als PHP-Code aus
Beschreibung
mixed eval
( string $code
)
Achtung
Das eval-Sprachkonstrukt ist
sehr gefährlich, weil es die Ausführung von beliebigem
PHP-Code erlaubt.
Seine Verwendung wird daher nicht empfohlen.
Wenn sorgfältig überprüft wurde, dass es keine andere Möglichkeit gibt als
dieses Konstrukt zu verwenden, ist besonders darauf zu achten
keine von Nutzern bereit gestellten Daten zu übergeben
ohne diese zuvor ordnungsgemäß zu validieren.
Parameter-Liste
-
code
-
Gültiger PHP-Code, der ausgewertet werden soll.
Der Code darf nicht in öffnende und schließende
PHP-Tags
eingeschlossen sein, d.h. 'echo "Hi!";' muss anstelle
von '<? echo "Hi!"; >' übergeben werden.
Es ist dennoch möglich den PHP-Modus durch die entsprechenden PHP-Tags zu
verlassen und wieder zu betreten, z.B.
'echo "Im PHP-Modus!"; ?>Im HTML-Modus!<? echo "Wieder im PHP-Modus!";'.
Abgesehen davon muss der übergebene Code gültiges PHP sein. Das
beinhaltet, dass alle Anweisungen ordnungsgemäß mit einem Strichpunkt
terminiert sein müssen. 'echo "Hi!"', zum Beispiel,
verursacht einen Parse-Fehler, wohingegen
'echo "Hi!";' funktioniert.
Eine return-Anweisung beendet die Auswertung des
Codes sofort.
Der Code wird im Geltungsbereich des eval
aufrufenden Codes ausgeführt. Daher bleiben sämtliche Variablen, die im
eval Aufruf definiert oder geändert werden, nach
dessen Ende sichtbar.
Rückgabewerte
eval gibt NULL zurück, außer wenn im
ausgewerteten Code return aufgerufen wird, dann aber
wird der an return übergebene Wert zurückgegeben. Falls
im ausgewerteten Code ein Parse Error auftritt, gibt
eval FALSE zurück und der weitere Code wird normal
ausgeführt. Es ist in eval nicht möglich, einen Parse
Error mittels set_error_handler abzufangen.
Beispiele
Beispiel #1 eval Beispiel (einfache Texteinfügung)
<?php
$string = 'Bierglas';
$name = 'Binding-Lager';
$str = 'Das ist mein $string, voll mit $name.';
echo $str . "\n";
eval ("\$str = \"$str\";");
echo $str . "\n";
?>
Das oben gezeigte Beispiel erzeugt folgende
Ausgabe:
Das ist mein $string, voll mit $name.
Das ist mein Bierglas, voll mit Binding-Lager.
Anmerkungen
Hinweis: Da dies ein Sprachkonstrukt
und keine Funktion ist, können Sie dieses nicht mit
Variablenfunktionen
verwenden.
TippBei allem, dessen Ergebnisausgabe direkt
im Browser angezeigt wird, können Sie die
Funktionen zur Ausgabesteuerung verwenden.
Damit lässt sich die Ausgabe dieser Funktion erfassen, und - zum Beispiel -
in einem string speichern.
Hinweis:
Im Fall eines schweren Fehlers im augewerteten Code wird das komplette
Skript beendet.