preg_replace code d'évaluation avec le modificateur /e
Je cherchais une alternative à la fonction eval() pour exécuter un code contenu dans une variable de type string, et a remarqué la preg_replace
avec le /e
modificateur.
Toutefois, le code est évalué assez bizarrement.
Par exemple, echo()
conduit à une erreur dans le php 5.3.6:
<?php
$code = 'echo( \'Hello, world!\'.PHP_EOL)';
preg_replace('/(.*)/e', $code, '' );
?>
Message d'erreur:
Parse error: syntax error, unexpected T_ECHO /Users/.../test.php(4) : regexp code sur la ligne
Erreur fatale: preg_replace(): Échec de l'évaluation de code:
echo ("Bonjour, monde!".PHP_EOL) /Users/.../test.php sur la ligne 4
Tout print()
œuvres, et les sorties d'un Bonjour tout le monde!:
<?php
$code = 'print( \'Hello, world!\'.PHP_EOL)';
preg_replace('/(.*)/e', $code, '' );
?>
Aussi, il semble que de plusieurs lignes de code, seul le premier est exécuté:
<?php
$t=1;
$code = '$t++;$t++;';
preg_replace('/(.*)/e', $code, '' );
echo $t;
?>
Sorties 2, pas 3.
Question: c'est le code de l'évaluation au sein PCRE dans preg_replace()
documenté quelque part?
Pas trouvé sur php.net
OriginalL'auteur Serge | 2011-10-28
Vous devez vous connecter pour publier un commentaire.
Le preg_replace
/e
eval n'évalue pas des états, mais juste un seul expression.Est une expression.
Ne l'est pas.
Et de même tout ce qui peut être suivie par un point-virgule.
Voir http://www.php.net/manual/en/language.expressions.php pour un aperçu approximatif.
OriginalL'auteur mario
De votre mieux de créer une fonction anonyme et en appelant à l'aide
preg_replace_callback
.OriginalL'auteur fire