Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2968 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Afficher correctement du code PHP "littéral"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Afficher correctement du code PHP "littéral"

n°2165358
alx067
Posté le 24-11-2012 à 20:16:17  profilanswer
 

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.

mood
Publicité
Posté le 24-11-2012 à 20:16:17  profilanswer
 

n°2165364
CyberDenix
Posté le 24-11-2012 à 21:31:06  profilanswer
 

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)
n°2165369
alx067
Posté le 24-11-2012 à 21:55:48  profilanswer
 

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
n°2165388
czh
Posté le 25-11-2012 à 01:44:43  profilanswer
 

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

n°2165395
alx067
Posté le 25-11-2012 à 11:24:25  profilanswer
 

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
n°2165406
czh
Posté le 25-11-2012 à 14:51:21  profilanswer
 

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. ?>

n°2165408
alx067
Posté le 25-11-2012 à 15:23:22  profilanswer
 

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
n°2165430
CyberDenix
Posté le 26-11-2012 à 00:36:14  profilanswer
 

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)

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Afficher correctement du code PHP "littéral"

 

Sujets relatifs
Récupérer une URL en PHP contenue dans une page[PHP] SSO avec LDAP
Créer une liste numérotée en PHPcode html généré par googlemap plante frontpage
Recupérer le code lang locale iso 639 (fr_FR) avec std::localePDO PHP
Code VBA (Revue analytique de 2 Balances)PHP, cookie, path.
Optimisation code phpPHP - Contact Management (tri, catégories ...)
Plus de sujets relatifs à : Afficher correctement du code PHP "littéral"


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR