Afficher correctement du code PHP "littéral"

Afficher correctement du code PHP "littéral" - PHP - Programmation

Marsh Posté le 24-11-2012 à 20:16:17    

Bonsoir, je ne suis pas un chevronné du PHP.
Voilà ce que je souhaite faire.
 
Je veux protéger mes pages PHP car je les rends publiques. J'ai donc codé mes pages à l'aide d'un clé "fait maison".
Ainsi les pages PHP sont codées et lors de l'affichage elles sont décodées à la volée grâce à une clé.
 
Mon problème est le suivant :
Lors de l'affichage de cette page le code obtenu s'affiche "littéralement":
 
Exemple :
La page d'origine est

Code :
  1. <?php echo "Bonjour" ?>


Mon code est alors crypté est devient quelque chose comme :

Code :
  1. 01234556789987654323201


Lors de l'affichage je décrypte le code qui devient :

Code :
  1. <?php echo $code ?>
  2. // Où $code = <?php echo "Bonjour" ?>


Ma page m'affiche alors littéralement:

Code :
  1. <?php echo "Bonjour" ?>


et non pas :

Code :
  1. Bonjour


 
Comment faire pour que la variable PHP soit interprétée ? Merci pour votre intérêt.

Reply

Marsh Posté le 24-11-2012 à 20:16:17   

Reply

Marsh Posté le 24-11-2012 à 21:31:06    

Il faut évaluer le code :
 
<?php
 
$code = 'echo \'Salut les trouduc !\'; ';
eval($code);
 
?>
 
Attention à bien slasher les quotes.
Les <?php ?> ne sont pas requis dans le code à évaluer


Message édité par CyberDenix le 24-11-2012 à 21:32:05

---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 24-11-2012 à 21:55:48    

Le soucis c'est que mes pages sont composées de PHP, de HTML et de JavaScript écrite sur plusieurs lignes avec des include(), des calculs, des formulaires et qu'il en a beaucoup. Je ne voudrais pas toutes les réécrire....


Message édité par alx067 le 24-11-2012 à 21:58:29
Reply

Marsh Posté le 25-11-2012 à 01:44:43    

Code :
  1. <?php
  2. file_put_contents($fichierTemporaire, $code);
  3. include $fichierTemporaire;
  4. unlink($fichierTemporaire);
  5. ?>


 
Sinon, solution avec eval qui fonctionne avec du contenu HTML : http://fr2.php.net/manual/fr/function.eval.php#108091

Reply

Marsh Posté le 25-11-2012 à 11:24:25    

J'ai essayé la fonction eval avec l'affichage du contenu HTML, avec ce code :

Code :
  1. <?php
  2. $test_string = 'A friendly llama <?php 1 == 1 ? "spit on" : "hugged"; ?> me';
  3. $p = new PhpStringParser();
  4. echo $p->parse($mixed_string);
  5. ?>


Et cela m'affiche cette erreur :
Fatal error: Class 'PhpStringParser' not found in C:\test.php on line 4.
 
Hélas, mon ami Google ne me renseigne pas sur cette erreur...


Message édité par alx067 le 25-11-2012 à 11:25:03
Reply

Marsh Posté le 25-11-2012 à 14:51:21    

Il faut déclarer la classe (http://fr2.php.net/manual/fr/function.eval.php#108091 ) pour l'utiliser.
 
C'est le block :

Code :
  1. <?php
  2. class PhpStringParser
  3. {
  4.     protected $variables;
  5.     public function __construct($variables = array())
  6.     {
  7.         $this->variables = $variables;
  8.     }
  9.     protected function eval_block($matches)
  10.     {
  11.         if( is_array($this->variables) && count($this->variables) )
  12.         {
  13.             foreach($this->variables as $var_name => $var_value)
  14.             {
  15.                 $$var_name = $var_value;
  16.             }
  17.         }
  18.         $eval_end = '';
  19.         if( $matches[1] == '<?=' || $matches[1] == '<?php=' )
  20.         {
  21.             if( $matches[2][count($matches[2]-1)] !== ';' )
  22.             {
  23.                 $eval_end = ';';
  24.             }
  25.         }
  26.         $return_block = '';
  27.         eval('$return_block = ' . $matches[2] . $eval_end);
  28.         return $return_block;
  29.     }
  30.     public function parse($string)
  31.     {
  32.         return preg_replace_callback('/(\<\?=|\<\?php=|\<\?php)(.*?)\?\>/', array(&$this, 'eval_block'), $string);
  33.     }
  34. }
  35. ?>

Reply

Marsh Posté le 25-11-2012 à 15:23:22    

OK, j'ai déclaré ma class PhpStringParser et maintenant il me dit que la variable mixed_string n'est pas définie.

Code :
  1. <?php
  2. class PhpStringParser
  3.     {
  4.         protected $variables;
  5.         public function __construct($variables = array())
  6.         {
  7.             $this->variables = $variables;
  8.         }
  9.         protected function eval_block($matches)
  10.         {
  11.             if( is_array($this->variables) && count($this->variables) )
  12.             {
  13.                 foreach($this->variables as $var_name => $var_value)
  14.                 {
  15.                     $$var_name = $var_value;
  16.                 }
  17.             }
  18.             $eval_end = '';
  19.             if( $matches[1] == '<?=' || $matches[1] == '<?php=' )
  20.             {
  21.                 if( $matches[2][count($matches[2]-1)] !== ';' )
  22.                 {
  23.                     $eval_end = ';';
  24.                 }
  25.             }
  26.             $return_block = '';
  27.             eval('$return_block = ' . $matches[2] . $eval_end);
  28.             return $return_block;
  29.         }
  30.         public function parse($string)
  31.         {
  32.             return preg_replace_callback('/(\<\?=|\<\?php=|\<\?php)(.*?)\?\>/', array(&$this, 'eval_block'), $string);
  33.         }
  34.     }
  35. $test_string = 'A friendly llama <?php 1 == 1 ? "spit on" : "hugged"; ?> me';
  36. $p = new PhpStringParser();
  37. echo $p->parse($mixed_string);
  38. ?>


Notice: Undefined variable: mixed_string in C:\test.php on line 39
 
Je n'ai trouvé aucune ligne qui parlait de cette variable mixed_string.


Message édité par alx067 le 25-11-2012 à 15:23:59
Reply

Marsh Posté le 26-11-2012 à 00:36:14    

L'erreur est transparente, tu pourrais faire un effort.
 
Ligne 39, tu utilises $mixed_string alors que tu ne l'as pas défini.
 
Comme cette variable n'est pas définie, on ne sait pas ce qu'elle contient et tu ne peux pas la passer en paramètre.  
 
Mets-toi à la place du parser PHP et tu verras que c'est évident que tu ne peux pas manipuler une variable dont tu ne connais pas la valeur.
 
C'est un peu comme si je te disais va me chercher un chmulburlks.
 
Si je t'ai pas dit ce qu'était un chmulburlks, tu vas pas savoir quoi faire.
 
Bah là c'est pareil.
 
Tu dois définir $mixed_string.
 
Genre $mixed_string = 'mon php';
 
Sauf que toi tu t'es gourré, tu as défini $test_string (ligne 36) et tu as passé $mixed_string (ligne 39).
 
Faudrait choisir !


---------------
Directeur Technique (CTO)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed