PHP-Code aus einem String ausführen - Teil 2

  • Der Codeschnipsel aus Teil 1 ist zwar schon ziemlich praktisch und grundlegend einsatzbereit, allerdings kann es unter Umständen zu ein paar Problemen beim Verwenden bestimmter PHP-Funktionen kommen. Außerdem gibts noch einen weiteren Hinweis zum Einsatz der Funktion eval(). Wenn das Skript welches mit eval() ausgeführt werden soll, unbekannt ist, was normalerweise nicht der Fall sein sollte, könnte es zur Ausgabe von Fehlermeldungen kommen. Dies passiert genau dann, wenn vor eval() bereits mit echo() eine Ausgabe geschieht und das spätere Skript in eval() die Funktion header() aufruft.

    <?php<#$>code = '<?php header("Location: http://www.pc-special.net/"); ?>'; echo('Jetzt gehts ab zu PC-Special...'); eval(' ?>' . <#$>code . '<?php ');?> Obiges Skript führt zu einer Fehlermeldung, da kein Header mehr gesendet werden kann, denn es wurde bereits etwas ausgegeben. Glücklicherweise gibt es unter PHP Funktionen zur Steuerung der Ausgabe. <?php<br /><#$>url = 'http://www.pc-special.net/';<#$>code = '<?php header("Location: <#$>url"); ?>'; ob_start(); echo('Jetzt gehts ab zu PC-Special...'); eval(' ?>' . <#$>code . '<?php ');ob_end_flush();?> Durch die Funktion ob_start() werden alle folgenden Ausgaben in einem Puffer gespeichert. Die Funktion ob_end_flush() gibt den Puffer schließlich aus und löscht diesen danach. Sollte zwischen drin die header()-Funktion verwendet werden, dann wird beispielsweise wie gewünscht umgeleitet. Die Fehlermeldung bleibt aus. Das letzte Beispiel soll Ihnen auch verdeutlichen, dass Variablen aus dem aufrufenden Skript auch im eval()-Skript verfügbar sind. <#$>url wird nämlich erst beim Ausführen von eval() im header()-Aufruf eingefügt.