Aller au contenu

Executer un script php provenant d'une chaine


raph37

Sujets conseillés

Bonjour a tous ;)

Je viens vers vous car je ne trouve pas de fonction php ou d'astuce pour faire ce que je veux .

J'aimerai trouver un équivalent de file_get_contents($file) mais qui insérerait une chaine en exécutant le code php contenue a l'interieur.

J'utilise un index.php qui doit faire appel à plusieurs fichiers externes contenant un mélange de html et de php .

Je ne peu pas utiliser de require ou d'include car cette fonction doit être utilisé dans une autre fonction exécutée avant l'affichage .

Aussi ce qui bloque pas mal les choses c'est que je dois traiter les liens dans les balises php avant d'exécuter le script et de récupérer le résultat ... ( un peu dur :wacko: )

Exemple concret :


//------------------
//fichier chaine.php
//------------------
<html>
<p>blabla</p>

<?php require("fichier.php")>
<?php echo"test"?>

</html>

//-------------------
// fichier: index.php
//-------------------

<?php
function moulinette($chaine)
{
$chaine=str_replace('<?php require("fichier.php")>','<?php require($newdossier."fichier.php")>',$chaine);
$executephp = fonctionRecherchee($Chaine)
return $executephp;
}
?>
$newChaine=moulinette($chaine);

J'espère que c'est assez claire, parce que moi et les explications ... :wacko:

Le but c'est juste de trouver la fonction qui permet d'éxécuter du php dans une chaine . :P

Merci de votre aide ;)

Lien vers le commentaire
Partager sur d’autres sites

Salut,

je ne vois absolument pas où tu veux en venir.

Il y a surement d'autres approches possibles pour ce que tu veux faire.

Peux-tu essayer d'être plus claire sur la finalité de ton script ?

++

Patrick

Lien vers le commentaire
Partager sur d’autres sites

Je me disais bien que je ne serait pas claire avec ce problème lol .

Le but c'est de récupérer une chaine contenant du php.

Cette chaine doit être traitée puis le code php contenu doit être exécuté dans l'index.php .

Pour mieux comprendre voici l'arborescence:

-index.php (fichier exécute qui s'agrémente des fichier suivant)

-dossier/file.php (mélange de html et de php)

-dossier/inc.php (mélange de html et de php contenant un require("file.php") et un echo)

-1 on recherche les balises php du fichier inc.php , on les modifient ( require("file.php") devient require("dossier/file.php").

-2 une fois les liens corrigés et existants , index.php doit exécuter le code php des autres pages .

Je cherche juste la fonction qui aurait le même effet que si on stockait la valeur d'un require sans l'afficher , ex : $chaineExecutee=require("dossier/inc.php");

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Je pense surtout que Patrick te demande ce que tu veux faire exactement. On a compris la fonction que tu recherches... Mais c'est à quelle fin que tu veux utiliser cette fonction ? Parce qu'on peut tenter de te trouver une autre façon d'envisager ton problème de départ, qui t'éviterait de passer par ce bidouillage.

Sinon, quand on code, c'est toujours mieux de séparer le traitement PHP de l'affichage. De faire donc tout le PHP que tu veux au début, puis de tout afficher d'un coup. :) (Voire d'utiliser un système de template, comme Smarty que j'utilise personnellement).

Lien vers le commentaire
Partager sur d’autres sites

Ok, désolé je n'avais pas saisie ! :unsure:

je cherche donc cette fonction pour utiliser un systeme de template mais qui comprend le php .

J'ai 1 index.php à l'origine de mon site qui affiche le résultat d'une fonction .

Cette fonction traite un fichier dans un dossier template (template/montemplate/index.php) .

ce fichier est compartimenté par des balises php qui appellent d'autres fichiers (require: header,page,footer )

Donc, plutôt que de faire une fonction simulant l'exécution je cherchais une fonction toute faite , mais apparemment elle n'éxiste pas ... lol :wacko:

Sinon quel serait vos conseils ? Merci de votre aide ;)

Lien vers le commentaire
Partager sur d’autres sites

eval

(PHP 4, PHP 5)

eval — Evaluate a string as PHP code

Description

mixed eval ( string $code_str )

Ça doit faire ce que tu cherches, non ?

Attention toutefois à ce que contient ta chaîne de caractères !

Lien vers le commentaire
Partager sur d’autres sites

Merci Dan , j'avais trouvé çà , mais le problèmes c'est que dans mes fichiers externes j'utilise des require(), ce qui malheureusement importe le fichier visé avant même l'affichage de la page .

$mavar = eval('<?php require(file.php) ?>') exécutera et affichera avant de stoker dans la variable ...

mais à la limite je peux changer les require() par des fonctions qui retournent une execution d'eval. c'est a tester :rolleyes:

Lien vers le commentaire
Partager sur d’autres sites

Bon , çà ne fonctionne pas , il ne comprend pas les fonctions du genre eval(file_get_contents($page)) ...

Il n'éxiste pas un moyen de ne pas afficher la sortie et de copier son contenu ?

une sorte de $chaine=require($file) , mais qui n'afficherai pas ?

J'aimerai vraiment garder le require() et include() car dreamweaver les comprend et m'affiche le résultat dans le panneau de création. Je peux donc avoir un index structuré de require() composé de fichier et avoir le résultat d'un seul. du coup je peux mieux gérer mes templates .

Lien vers le commentaire
Partager sur d’autres sites

Et si tu nous disais ce que contient le fichier inclus ? On y verrait peut-être plus clair ;)

Tu veux que $chaine contienne l'intégralité du fichier, sans interprétation ? Dans ce cas un simple fread() devrait faire l'affaire.

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Oui Dan , les fichier inclus contiennent tous un mélange de html et de php .

Example :


//------------------
//Index.php du site
//------------------

$page=('templates/montemplate/index.php');
$chaine=traitementContenu($page)// fonction qui traite le contenu puis l'affiche (modifie les url des liens)
echo $chaine;


//------------------
// 'templates/montemplate/index.php'
//------------------

<html>
//etc...
<div class="header">
<?php require('header.php');?> // fichier placé à 'templates/montemplate/header.php'
</div>
//etc...
<div class="main">
<?php require('main.php');?> // fichier placé à 'templates/montemplate/main.php'
</div>
//etc...
<div class="footer">
<?php require('footer.php');?> // fichier placé à 'templates/montemplate/footer.php'
</div>
//etc...
</html>


//------------------
// 'templates/montemplate/main.php'
//------------------

<div class=menu>
<?php createUlLi($array);?>
</div>

Merci Captain_torche , je vais tester ob_start() , il me semblait que les require s'affichaient quand meme avec çà .

Modifié par raph37
Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Bon ben Captain_torch tu m'a bien éclairé de tes lumières , effectivement ob_start() marche super bien ;)

c'est super , maintenant je peux modifier mon template étant affiché complétement dans mon dreamweaver et ajouté n'importe quelle balise php dans toute la profondeur des fichiers qui s'appelent ! :P

Merci a tous pour votre aide ;)

Modifié par raph37
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...