PHP Eval
Résolu
Poil
-
croy Messages postés 453 Date d'inscription Statut Membre Dernière intervention -
croy Messages postés 453 Date d'inscription Statut Membre Dernière intervention -
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 ?
A voir également:
- PHP Eval
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Retour a la ligne php - Forum Webmastering
- Alert php - Forum PHP
- Retour a la ligne php ✓ - Forum PHP
4 réponses
Pour clarifier ton test :
Et donne le résultat par un copié/collé
echo '1:' . $foovar . '<br />'; echo '2:' . eval ( $foovar . ';' ) . '<br />'; $myvar = eval( $foovar . ";" ); echo '3:' . $myvar;
Et donne le résultat par un copié/collé
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 :
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.
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>';
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