raph37 Posté 15 Juin 2011 Posté 15 Juin 2011 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 ) Exemple concret : //------------------//fichier chaine.php//------------------<html><p>blabla</p><?php require("fichier.php")><?php echo"test"?></html>//-------------------// fichier: index.php//-------------------<?phpfunction 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 ... Le but c'est juste de trouver la fonction qui permet d'éxécuter du php dans une chaine . Merci de votre aide
Patrick Posté 15 Juin 2011 Posté 15 Juin 2011 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
raph37 Posté 15 Juin 2011 Auteur Posté 15 Juin 2011 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");
Sarc Posté 15 Juin 2011 Posté 15 Juin 2011 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).
raph37 Posté 15 Juin 2011 Auteur Posté 15 Juin 2011 Ok, désolé je n'avais pas saisie ! 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 Sinon quel serait vos conseils ? Merci de votre aide
Dan Posté 16 Juin 2011 Posté 16 Juin 2011 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 !
Dan Posté 16 Juin 2011 Posté 16 Juin 2011 C'est pour cela que je lui dis bien de faire attention au contenu de la chaîne !
raph37 Posté 16 Juin 2011 Auteur Posté 16 Juin 2011 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
raph37 Posté 16 Juin 2011 Auteur Posté 16 Juin 2011 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 .
Dan Posté 16 Juin 2011 Posté 16 Juin 2011 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.
captain_torche Posté 16 Juin 2011 Posté 16 Juin 2011 Si tu veux exécuter le contenu, mais ne pas l'afficher, tu peux utiliser la bufferisation de sortie, avec ob_start()
raph37 Posté 16 Juin 2011 Auteur Posté 16 Juin 2011 (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é 16 Juin 2011 par raph37
raph37 Posté 16 Juin 2011 Auteur Posté 16 Juin 2011 (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 ! Merci a tous pour votre aide Modifié 16 Juin 2011 par raph37
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant