zu fangen Wenn ich den folgenden Code von der Kommandozeile versuchen, fängt sie die ParseError richtig:Wie ParseError in Yii2 mit PHP 7.1
<?php
$command = "[";
set_error_handler(function($errno, $errstr) {
throw new Exception($errstr);
}, E_ALL);
try {
eval("\$command = $command;");
} catch (ParseError $e) {
echo 'Caught parse error: ', $e->getMessage(), "\n";
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
Die Ausgabe lautet:
$ php eval.php
PHP ParseError: syntax error, unexpected ';', expecting ']' in /home/ntibor/tmp/eval.php(9) : eval()'d code on line 1
PHP Stack trace:
PHP 1. {main}() /home/ntibor/tmp/eval.php:0
Caught parse error: syntax error, unexpected ';', expecting ']'
Allerdings, wenn ich m einen sehr ähnlichen Code in Yii2 mit verfängt es nicht die ParseError:
set_error_handler(function($errno, $errstr) {
throw new \yii\base\Exception($errstr);
}, E_ALL);
try {
eval("\$config = $this->calculation_formula;");
} catch (ParseError $e) {
restore_error_handler();
return $e->getMessage();
} catch (\yii\base\Exception $e) {
restore_error_handler();
return $e->getMessage();
}
restore_error_handler();
ich nichts in den Lieferantencode von Y gefunden haben ii2 bezüglich ParseError. Ich sehe keinen Unterschied zwischen der cli und apache2 php Konfiguration entweder in Bezug auf E_PARSE.
[Wenn der Befehl "eval" wird, wird er zu '" \ [= [; "' PHP erwartet die enge eckige Klammer, d. H. '" \ [] = []; ". '\ $ config = $ this-> calculation_formula;" 'könnte etwas anderes sein als' "\ $ command = $ befehl;' –
Das ist klar. Das Problem ist, dass der ParseError nicht abgefangen wird. Ich habe "[" verwendet, um zu feuern ein ParseError. –