PHP Fällt EVAL() in PHP 7 weg?

Verwendest du das wirklich!? :O

Darf ich mal fragen wofür?
 
Denke mal aus Sicherheitsgründen.


Code:
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.
 
Denke nicht, dass es wegfällt. In Präsentationen muss es nämlich immer herhalten, um den 'ParseError' Error aus PHP7 zu demonstrieren:

Code:
try {
    eval(...);
} catch (ParseError $e) {
    echo $e->getMessage(), "\n";
}

ParseError is thrown when an error occurs while parsing PHP code, such as when eval() is called.
 
PongLenis schrieb:
Verwendest du das wirklich!? :O

Darf ich mal fragen wofür?

Ja, nutze ich um meine HTML-Dateien zu parsen und Variablen zu übersetzen. Eine Art Mini-"Template Engine", die super läuft:
PHP:
eval('$site_content.="'.loadTpl('login').'";');

loadTpl() macht dann nur folgendes und fertig:
PHP:
return str_replace('"', '\"', file_get_contents('templates/'.$tpl.'.htm'));

Jetzt muss ich mir eine andere Möglichkeit suchen und ALLE Systeme anpassen :(
Möchte auf jeden Fall ALLES mit PHP 7 laufen haben.

Kennt jemand eine gute Alternative?
Aber bitte keine kompletten und fertigen Template Engines wie Smarty und Co, die sind mir viel zu lahm und overdressed :)
 
Zuletzt bearbeitet:
Äh, du kannst doch auch ohne eval() den Inhalt von templates/xxx.htm in die Variable $site_content schreiben oder sehe ich das falsch?
 
Ja, mit file_get_contents() geht das denke ich mal. Aber meine Variablen werden dann nicht mehr übersetzt. :(
 
TheReal666 schrieb:
Denke mal aus Sicherheitsgründen.
Ja. Das wäre sicher ein guter Grund. Ein weiterer könnte sein, dass sich eval verhindert das sich PHP geschwindigkeitstechnisch wirklich gut optimieren lässt, weil eben erst zur Laufzeit die Auswirkungen klar sind.

Das eval mit PHP 7 wegfällt kann ich mir nicht vorstellen. Wenn überhaupt was in der Richtung, dann wird es zunächst auf deprecated gesetzt.

Gruß
Andy
 
Habe gerade mal einen Webserver mit PHP 7 installiert, Anwendungen laufen ohne jegliche Fehlermeldung/Hinweismeldung. TOP!
 
Du solltest nebenbei bemerkt auch die englische PHP-Dokumentation lesen und nicht die deutsche Übersetzung, denn da fehlen oftmals Teile oder sind einfach falsch.
 
Zurück
Oben