Hello,
ne bööööse function
http://de2.php.net/manual/de/function.eval.php
Was ist an der Funktion böse?
Mit include hanieren doch auch immer alle rum.
Das ist nicht weniger böse.
Nur die Quelle muss vertrauenswürdig sein.
Eval() wird nur dadurch böse, wenn man das Argument aus nicht bösen Quellen füllt.
in der Datei steht z.B.
$vorname $nachname wohnt in $ort
$dateiinhalt = file_get_contents(Dateiname);
eval("$str = "$dateinhalt";");
echo $str;
Man beachte, dass eval() keine Funktion ist, sondern ein Sprachkonstrukt des Parsers. Der Rückgabewert hat nicht direkt etwas mit der Evaluation zu tun, sondern wird durch ein "return $wert;" innerhalb des Eval() erzeugt. Die Valuation wird am Return sofort abgebrochen.
Das Argument von Eval muss nach einmaliger Demaskierung und Ersetzung gültigen PHP-Code ergeben.
In unserem Beispiel von oben würde dann im Script stehen
$str = "$vorname $nachname wohnt in $ort";
Nachdem eval das Argument demaskiert hat, setzt es den Befehlszeiger des Scriptes auf den Anfang der demaskierten Zeile. Es ist nun ganz offensichtlich, dass die Variablen $vorname, $nachname und $ort zu diesem Zeitpunkt bekannt sein müssen. Sonst gibt es eine Warnung, wenn "error_reporting(E_ALL);" gesetzt ist. Und das sollte es zum Testen auf jeden Fall!
Die Variablen stehen nach dem eval() auch weiterhin im Script zur Verfügung.
Man sollte daher das eval() iner einer Funktion mit genau festgelegtem NameSpace kapseln, damit nicht aus Versehen eingeschleppte Variablen diejenigen aus dem Script überschreiben, ohne dass man das will.
Die Funktion würde dann z.B. so aussehen
function safe_eval($value, &$str, $vorname, $nachname, $ort)
{
@eval("$str = "$value";")
if(empty($php_errormsg)) return true;
return false;
}
Aufruf:
$str='';
$vorname='Hans';
$nachname='Hustenbacks';
$ort='Hannover';
if (safe_eval($value, $str, $vorname, $nachname, $ort)) echo $str;
So kann eval auf nichts anderes zugreifen, als erlaubt ist. Allerdings stehen die globalen Arrays auch in safe_eval() zur Verfügung.
und nochmal als ganzes Script
<?php ### safe_eval.php ###
error_reporting(E_ALL);
#-----------------------------------------------------------
function safe_eval($value, &$str, $vorname, $nachname, $ort)
{
@eval("$str = "$value";");
if (empty($php_errormsg))
{
return true;
}
else
{
return false;
}
}
#------------------------------------------------------------
#Aufruf:
$value = '$vorname $nachname wohnt in $ort';
$str='';
$vorname='Hans';
$nachname='Hustenbacks';
$ort='Hannover';
if (safe_eval($value, $str, $vorname, $nachname, $ort)) echo $str;
?>
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau