kostenloser Webspace werbefrei: lima-city


Alternative zu eval() oder Test von Ausdruck

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    m******s

    Moin,

    also, ich habe gelesen, dass bei der Benutzung von eval() im Falle eines Fehler innerhalb des zu evaluierenden Ausdruckes ein Abbruch des gesamten PHP-Skriptes folgt, der sich zu allem Übel noch nicht mal mit nem error-handler abfangen lässt.
    Ich suche also folgendes:
    - Entweder eine Alternative zu eval(), die zwar einen Fehler wirft, aber nicht das gesamte PHP-Skript abbrechen lässt
    - ODER eine Möglichkeit, den Fehler aus der eval()-Funktion irgendwie abzufangen
    - ODER einen PHP-Ausdruck sozusagen \"Testlaufen\" zu lassen, also enthaltene Fehler zu erkennen und zurückzugeben.

    Hintergrund des ganzen ist, dass ich eine Web-Anwendung schreibe, in der der User die Möglichkeit hat, Code einzugeben zur Ausführung, aber in streng kontrollierter Umgebung, wenn man so will eine Art Debug-Modus, der einen auftretenden Fehler zurückgibt, mit Zeilenangabe etc., wie es auch ein \"stinknormaler\" Debugger tut.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. t*****b


    merovius schrieb:
    Hintergrund des ganzen ist, dass ich eine Web-Anwendung schreibe, in der der User die Möglichkeit hat, Code einzugeben zur Ausführung, aber in streng kontrollierter Umgebung, wenn man so will eine Art Debug-Modus, der einen auftretenden Fehler zurückgibt, mit Zeilenangabe etc., wie es auch ein \\\'stinknormaler\\\' Debugger tut.


    In diesem Fall würde ich den Input des Users temporär als PHP-Datei speichern und die Datei per fopen() öffnen, somit wird das Script ausgeführt und die Ausgabe der PHP-Datei zurückgegeben.
  4. Autor dieses Themas

    m******s


    In diesem Fall würde ich den Input des Users temporär als PHP-Datei speichern und die Datei per fopen() öffnen, somit wird das Script ausgeführt und die Ausgabe der PHP-Datei zurückgegeben.


    Und dabei würde im Falle eines Fehlers dann die Fehlermeldung zurückgegeben, nehme ich mal an? Gibt es theoretisch eine Möglichkeit, sonen Fehlerstring in ein Fehlerobjekt umzuwandeln?
    Und wie macht man das überhaupt? hab in die PHP-Doku von fopen() geschaut und irgendwie offenbart es sich mir nicht, wie man damit PHP-Code ausführt...
  5. Ich bin nicht sicher ob da geht, soweit ich weiß gibt es keine vorgefertigte Lösung dazu.

    Allerdings könnte man einen Parser für die Fehlernachrichten schreiben, der das ganze dann als fehlerobjekt zurückgibt oder was man sonst damit anstellen möchte.
    Je nachdem was du vorhast ist es aber vielleicht zweckmäßiger sowas wie eine \"Mini-Scriptsprache\" zu entwickeln?^^
  6. Autor dieses Themas

    m******s

    Allerdings könnte man einen Parser für die Fehlernachrichten schreiben, der das ganze dann als fehlerobjekt zurückgibt oder was man sonst damit anstellen möchte.


    Joa, wird vermutlich darauf hinauslaufen, so komplex sind diese Fehlermeldungen ja auch nicht aufgebaut...

    Je nachdem was du vorhast ist es aber vielleicht zweckmäßiger sowas wie eine \"Mini-Scriptsprache\" zu entwickeln?^^


    Ne, soll schon explizit PHP sein, denn es geht im Endeffekt um die Entwicklung von PHP-Anwendungen... irgendwie... (alles noch seeehr geheimnisvoll, was ich hier zusammenschreibe :lol:)

    Hab jetzt erst einmal ein Workarrounf, hoffe das funktioniert (hab noch keine Möglichkeiten gehabt, Code zu testen, am Ende fliegt mir bestimmt alles um die Ohren).
    Hab nu den auszuführenden Code vor dem eval()-Aufruf so manipuliert:
    var $err = null;
    		$str_code = \'try {\' . $str_code;
    		$str_code .= \'} catch (Exception $e) { $err = $e }\';
    		if(!eval($str_code))
    		{
    			trigger_error(\'ERROR: \' . $err->getMessage() . \' in usercode in line \' . $err->getLine(), E_USER_ERROR); 
    		}

    Auf diese Weiso sollte zumindest das Script nicht abgebrochen werden, wenn dort ein Fehler drin ist und es sollte ein normaler Fehler geworfen werden, den ich dann manuell abfangen und ausgeben kann... Für Alternativen wäre ich aber immer noch dankbar ;)
  7. t*****b



    In diesem Fall würde ich den Input des Users temporär als PHP-Datei speichern und die Datei per fopen() öffnen, somit wird das Script ausgeführt und die Ausgabe der PHP-Datei zurückgegeben.


    Und dabei würde im Falle eines Fehlers dann die Fehlermeldung zurückgegeben, nehme ich mal an? Gibt es theoretisch eine Möglichkeit, sonen Fehlerstring in ein Fehlerobjekt umzuwandeln?
    Und wie macht man das überhaupt? hab in die PHP-Doku von fopen() geschaut und irgendwie offenbart es sich mir nicht, wie man damit PHP-Code ausführt...


    Es wird die PHP-Datei aufgerufen und somit wird diese auch geparsed. Im Gegensatz zu include() oder require(_once)() erhält man die Ausgabe der PHP-Datei in einer Variable und kann diese Variable anzeigen, das wäre dann der Output. Ist im PHP-Script ein Error/Warning/Notice/Parse-Error/etc, erhält man diesen natürlich auch zurück wie den anderen Output der Datei (HTML, echo, printf, etc.) natürlich auch. Die Funktion liefert im Grunde legendlich den Output der aufgerufenen Datei zurück. Natürlich kannst du in der PHP-Datei ein eigenes Error-Handling integrieren (einfach mal per Google suchen).

    $file = \"datei.php\";
    $fh = fopen($file, \'r+\');
    $content = fread($fh, filesize($file));
    echo \"In der Datei steht geparsed: <br />\".$content;


    Probier doch einfach mal aus, was passiert. Datei.php wird geparsed und die Ausgabe der Datei angezeigt.
    /Edit: Natürlich musst du die Datei erst einmal schreiben (fwrite()).


    Beitrag geändert: 17.7.2008 0:45:08 von trueweb
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!