2009-11-20 6 views
0

J'essaie de comprendre comment la fonction eval() fonctionne d'une manière simple. J'ai essayé le code suivant mais cela ne fonctionne pas, à la place il montre une erreur d'analyse.Comment eval fonctionne-t-il en PHP?

<?php 
    $str = "exit()"; 
    eval($str); 
?> 

Quel est le problème avec mon code?

+0

> Comment utiliser la fonction eval en PHP? Si vous pouvez l'aider: Pas du tout. Je ne fais que plaisanter :) –

+0

Désolé la question était erronée: D Je ne suis pas un locuteur natif anglais donc je fais des erreurs. – taabouzeid

+0

Non, votre question était complètement o.k. et bien anglais. Je faisais référence au fait qu'éval() est généralement considéré comme une mauvaise pratique et devrait être évité. –

Répondre

4

a besoin d'un point-virgule, je pense

<?php 
    $str = "exit();"; 
    eval($str); 
?> 

De la documentation PHP:

Remember that the string passed must be valid PHP code, including things like terminating statements with a semicolon so the parser doesn't die on the line after the eval()

+0

Merci beaucoup. Ce tutoriel http://www.tuxradar.com/practicalphp/4/4/0 m'a un peu perturbé. – taabouzeid

2

Juste un petit conseil - le code eval'ed est évalué de façon dynamique et peut échapper au collecteur des ordures.

+0

C'est à peine le plus gros problème avec eval. :) –

0

$str = "exit();"; peut fonctionner. eval() ne doit pas être utilisé, sauf lorsque cela est vraiment nécessaire.

Également, essayez d'utiliser une fonction autre que exit() ou passez une chaîne en tant qu'argument à la fonction exit. Sinon, vous n'en verrez pas de sortie.

+0

J'essayais juste de suivre ce tutoriel http://www.tuxradar.com/practicalphp/4/4/0 Il a été mentionné là sans un point-virgule c'est pourquoi j'ai été confus. – taabouzeid

2

L'erreur est-elle "Parse error: syntax error, unexpected $end in Command line code(1)"? Si oui, c'est parce que vous n'avez pas mis de point-virgule à la fin de exit().

Essayez donc:

<?php 
    $str = "exit();"; 
    eval($str); 
?> 

Hope this helps.

1

Il a besoin d'un point-virgule à la fin:

et le problème avec eval est qu'il appelle l'analyseur d'un langage IL, donc, le code evalued serait un VSL (langage très lent), alors , si votre site ne sera pas touché par de nombreux utilisateurs en même temps, alors ce n'est pas un problème, mais si vous projetez quelque chose de grand, alors je vous suggère de ne pas utiliser eval, seulement dans le cas vraiment nécessaire.

espérons que ça aide.
Joe