PHP Eval
Résolu
Poil
-
croy Messages postés 457 Statut Membre -
croy Messages postés 457 Statut Membre -
Bonjour,
J'ai un soucis sur un eval,
Je récupère depuis une base de donnée une expression, dans cette expression je fais un str_replace et elle ressemble donc à cela quand je l'affiche :
($PSYS_maxPerm - $dbc_maxPerm - $spoolrsv_maxPerm)
Donc mon str_replace
$foovar=str_replace('[TYPE]',$typeesp['var_type_espace'][$i],$catespc['chaine_baseS'][$j]);
echo $foovar;
ensuite je veux que PHP évalue mon expression
$myvar=eval('$foovar;');
mais si je fais un echo de $myvar, la variable est vide.
Si j'affiche chaque variable contenu de mon expression:
echo $PSYS_maxPerm.' '.$dbc_maxPerm.' '.$spoolrsv_maxPerm;
3.77692582244E+12 2137464490844 1639461331600
en mettant en forme avec un round et divisez par /1000000 :
03776.926 - 2137.464 - 1639.461 = 0
Une idée ?
J'ai un soucis sur un eval,
Je récupère depuis une base de donnée une expression, dans cette expression je fais un str_replace et elle ressemble donc à cela quand je l'affiche :
($PSYS_maxPerm - $dbc_maxPerm - $spoolrsv_maxPerm)
Donc mon str_replace
$foovar=str_replace('[TYPE]',$typeesp['var_type_espace'][$i],$catespc['chaine_baseS'][$j]);
echo $foovar;
ensuite je veux que PHP évalue mon expression
$myvar=eval('$foovar;');
mais si je fais un echo de $myvar, la variable est vide.
Si j'affiche chaque variable contenu de mon expression:
echo $PSYS_maxPerm.' '.$dbc_maxPerm.' '.$spoolrsv_maxPerm;
3.77692582244E+12 2137464490844 1639461331600
en mettant en forme avec un round et divisez par /1000000 :
03776.926 - 2137.464 - 1639.461 = 0
Une idée ?
Configuration: Windows Vista Firefox 3.0
4 réponses
-
Remplace donc
$myvar=eval('$foovar;');
par$myvar=eval( $foovar . ";" );
-
Non plus :(
Si je fais
1: echo $foovar.'<br />';
2: echo eval ($foovar . ';');
3: $myvar=eval( $foovar . ";" );
4: echo $myvar;
Ca me donne juste
1:
($PSYS_maxPerm - $dbc_maxPerm - $spoolrsv_maxPerm)
($PSYS_currentPerm - $dbc_currentPerm - $spoolrsv_currentPerm)
($PSYS_freePerm - $dbc_freePerm - $spoolrsv_freePerm)
($PSYS_skewedPerm - $dbc_skewedPerm - $spoolrsv_skewedPerm)
Cdt
-
-
Pour clarifier ton test :
echo '1:' . $foovar . '<br />'; echo '2:' . eval ( $foovar . ';' ) . '<br />'; $myvar = eval( $foovar . ";" ); echo '3:' . $myvar;
Et donne le résultat par un copié/collé-
1:($PSYS_maxPerm - $dbc_maxPerm - $spoolrsv_maxPerm)
2:
3:1:($PSYS_currentPerm - $dbc_currentPerm - $spoolrsv_currentPerm)
2:
3:1:($PSYS_freePerm - $dbc_freePerm - $spoolrsv_freePerm)
2:
3:1:($PSYS_skewedPerm - $dbc_skewedPerm - $spoolrsv_skewedPerm)
2:
3:- Je viens de consulter la doc de la fonction eval dont la valeur de retour est décrite par :
eval() retourne NULL sauf si return est appelée dans le code évalué, auquel cas la valeur passée à return est retournée. Dans le cas d'une erreur de syntaxe dans le code évalué, eval() retourne FALSE. Dans le cas d'une erreur fatale dans le code évalué, l'ensemble du script se terminera. En PHP 3, eval() ne retourne pas de valeur.
Essaye le code suivant :$foovar = '3 + 4'; echo '1:' . $foovar . '<br />'; echo '2:' . eval ( '$monResultat=' . $foovar . ';' ) . '<br />'; echo '3:' . $monResultat;
après exécution la variable $monResultat contiendra le résultat (7).
Modifie donc ton script final pour inttégrer le résultat dans une variable passée à eval.
-
-
Je comprends que ces 4 echos sont dans une boucle. Pour avancer pas à pas, ne passe qu'une seule fois dans la boucle et modifie ton code de test :
echo '1:' . $foovar . '<br />'; echo '2:' . eval ( $foovar . ';' ) . '<br />'; $myvar = eval( $foovar . ";" ); echo '3:' . $myvar . '<br />'; echo '4:'; var_dump( $PSYS_maxPerm ) ; echo '<br>'; echo '5:'; var_dump( $dbc_maxPerm ); echo '<br>'; echo '6:'; var_dump( $spoolrsv_maxPerm ); echo '<br>';
-
S'il est nécessaire de te consoler, je suis aussi un C**. On peut aussi considérer que nous avons appris deux choses :
- le fonctionnement de eval
- l'importance de lire la doc.