Problème avec eval() et fonction return

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème avec eval() et fonction return

Re: Problème avec eval() et fonction return

par supercanard » 30 janv. 2011, 17:37

Merci pour le lien.
En effet le return mais fin à eval().
Tu m'a mis sur une piste, il suffit de contourner en faisant un test sur eval() :
function displayStaticContent(){
	global $static;
	if(eval(callHook('displayStaticContent'))){
		echo $static['content'];
	}
}
function pluginFunc(){
	$return = "<?php echo '<h2>'.\$static['name'].'</h2>'; return false; ?>";
	return $return;
}

Re: Problème avec eval() et fonction return

par moogli » 30 janv. 2011, 17:06

salut,


hum, je pense que le return met fin à eval et pas à la fonction qui utilise eval !

j'ai essayé
<?php
function pluginFunc(){
        $return = "<?php echo '<h2>'.\$static['name'].'</h2>'; 
		if (false) {
			echo 'if <br />';
		}
		else {
			return;
		}
		echo 'testagee';?>";
        return $return;
} ?>
qui tend à aller dans ce sens, mais j'ai pas trouvé de réponse exact !

edit : y a aussi ce sujet (entre autre) qui parle des hook.

@+

Problème avec eval() et fonction return

par supercanard » 30 janv. 2011, 16:34

Bonjour,

J'essaye de faire un système de hooks qui permettrait de modifier le comportement d'une fonction.
Je ne vais pas rentrer dans les détails, je pense que mon code parlera de lui même et n'est pas difficile à comprendre.

En gros, je voudrais injecter du code dans ma fonction displayStaticContent() via la fonction pluginFunc()
Cela marche plus ou moins à moitié, car si l'on regarde ma fonction pluginFunc() elle devrait normalement faire un echo pour finalement stopper l’exécution de la fonction displayStaticContent() grâce a un return.

Pour le echo, pas de problème,e mais la fonction continue de s’exécuter jusqu'au bout malgré le return.
Si par contre je place le return avant le echo, plus rien ne se passe, le return stoppe bien displayStaticContent().

Y'a t'il quelquechose qui m'échappe ?
Je n'ai vraiment aucune piste...
<?php

function addHook($name, $func){
	global $hooks;
	$hooks[$name] = $func;
}
function callHook($name){
	global $hooks;
	if(isset($hooks[$name])) return ' ?>'.call_user_func($hooks[$name]).'<?php ';
}

function displayStaticContent(){
	global $static;
	eval(callHook('displayStaticContent'));
	echo $static['content'];
}

$hooks = array();
$static = array('id' => '1', 'name' => 'Test', 'content' => '<p>Hello.</p>');

addHook('displayStaticContent', 'pluginFunc');
function pluginFunc(){
	$return = "<?php echo '<h2>'.\$static['name'].'</h2>'; return; ?>";
	return $return;
}
?>

<?php displayStaticContent(); ?>