Bonjour!

Voila je voudrais savoir si il es possible d'inclure n'importe quel fragment de code à l'intérieur d'une variable. Je m'explique: Je code une fonction qui génére automatiquement une page en fonction de certain paramètre, et je doit donc inclure un code php dans ma variable $file qui sera donc le code source de la page, mais voila! ça ne fonctionne pas, des erreurs de syntaxe se déclarent et je ne sais plus quoi faire !!

Voici mon code:

function createFile($champ)
	// On crée le fichier qui contiendra la requête autocompletion
	{
	
	$file = 'autocompletion/'.$champ;
	if(!file_exists($file)){	
	createDir('autocompletion');
	$code = "<?php
require '../functions.php';
$post = $_POST['autocontact'];
connect();
$sql = "select `contact` from `bill_user` WHERE `contact` LIKE '$post%'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
echo'<ul>';
while($data = mysql_fetch_assoc($req)){echo '<li>'.$data['contact'].'</li>';}
echo'</ul>';
@mysql_close();
?>";
 	file_put_contents( 'autocompletion/'.$champ.'.php', $code );
	}
	}


Je ne sais plus que faire!! je m'en remet à vos lumieres!!

Bien cordialement, aurelien
Salut,

plutôt une question pour le forum PHP. et encore c'est du PHP avançé ça.

hum c'est quoi ce caractère bizarre? qui ressemble a un ? mais avec un bulle autour
que tu as mis dans le code.

t'aurais pas un problème d'encodage?

et si tu nous donnais les erreurs que tu as?
Hello,

Pour ta variable code qui doit contenir du code html je te propose cela :


$code=file_get_contents('cheminVersTonFichierHtml.html');


et pour un fichier php :

ob_start();
include('cheminVersTonFichierHtml.php');
//ton traitement php
$code=ob_get_clean();

Cette méthode te permet d'importer du php sans l'executer Smiley cligne

Voilou
moi j'ai testé ton code et a par que createDir n'existe pas ( tu nous a pas donné le code) et que je l'ai remplaçé par


if (!file_exists('autocompletion')) mkdir('autocompletion'); 

(pour ne créer qu'une fois le dossier)
et ben ça marche. du moins avec du contenu "normal".

il existe peut-être des limitations d'encodage ou pour des caractères spéciaux je sais pas, la doc de php.net est pas très bavarde la-dessus.


pour le ob_start et le ob_get_clean

oui et non.

oui c'est une bonne méthode et peut-être bien a conseillé dans ce cas

non

aspiGeek a écrit :
Cette méthode te permet d'importer du php sans l'executer


simple exemple tiré de la doc php.net et légerement étendue:


$str = "a";
ob_start();

echo "Bonjour le monde !".$str;

$out = ob_get_clean();

$str = "b";

$out = strtolower($out);

var_dump($out);
?>


le résultat c'est

string(19) "bonjour le monde !a"

le code a été interpreté donc executé entre les 2 fonctions ob_*. sinon ça finirait par b.

par contre l'affichage n'a pas été produit et est contenu dans $code pour une utilisation ultérieure.
Modifié par CPascal (18 Apr 2010 - 16:06)
Tout d'abord un grand merci pour votre intérêt! Je vais tester toutes vos methodes, là franchement vous m'avez donné plein de pistes ça m'a regonflé!

Pour répondre à CPascal, les erreurs qui s'affichent sont un causées par la syntaxe du code inclu dans la variable, ce sont des caractère tel que accents, apostrophes ou un truc du genre, c'est pourquoi je crois qu'il serais possible par exemple de faire une fonction pour remplacer tous ces caractères gênant par un caractère solvable puis de faire une fonction pour les remplacer au final!

Par ex cette fonction qui remplace les "/" par "'" sur $var:

str_replace ( "/", "'", "$var")


Merci encore!!!!
Modifié par aurelien78 (18 Apr 2010 - 17:14)
Re,

pb d'accents ? on dirait vraiment un problème d'encodage. un peu comme ton ? en bulle.

moi j'ai fais des tests avec des accents et s'en rien constater d'anormal.

 function createFile($champ) 
    // On crée le fichier qui contiendra la requête autocompletion 
    { 
		$file = 'autocompletion/'.$champ; 
		if(!file_exists($file)){     
			if (!file_exists('autocompletion')) mkdir('autocompletion'); 
			$code = "?'gfgféouà"; 
			file_put_contents( 'autocompletion/'.$champ.'.php', $code ); 
		} 
    }


question bête :

tu édites bien ton code et lis le fichier créer avec le même éditeur?
Modifié par CPascal (18 Apr 2010 - 17:39)
@CPascal

Bah oui il exécute le php vu qu'on sort avec le ob_get_clean(), c'est pour ça que j'avais précisé le commentaire "traitement php" mais je me suis peut être mal exprimé, tu as bien fait de me reprendre Smiley cligne

Par contre pour moi le php est exécuté justement à la fonction ob_get_clean().
Merci pour vos réponses!! J'ai tout tester, serialize(), ob_start(), mais sans succès! Par contre je m'en suis finalement sorti avec str_replace().

En faites ce sont les $ et les " qui posaient problème! Je travail bien avec le même logiciel.

Le ? dans les bulles correspond au balise php car je souhaitais injecter du code pur! Jai finalement juste remplacer les caractères qui me donnaient des erreurs, puis je les ai rattrapé en bout de course avec str_replace(), ce qui donne ça finalement:

function createFile($champ)
	// On crée le fichier qui contiendra la requête autocompletion
	{
	
	$file = 'autocompletion/'.$champ;
	if(!file_exists($file)){	
	createDir('autocompletion');
	$code = "
<?php
vpost = v_POST['autocontact'];
connect();
vsql = gselect `contact` from `bill_user` WHERE `contact` LIKE 'vpost%'g;
vreq = mysql_query(vsql) or die('Erreur SQL !<br>'.vsql.'<br>'.mysql_error());
echo'<ul>';
while(vdata = mysql_fetch_assoc(vreq)){echo '<li>'.vdata['contact'].'<'li>';}
echo'<'ul>';
@mysql_close();
?>
	";
	$code = str_replace ( "v", "$", $code);
	$code = str_replace ( "g", '"', $code);
 	file_put_contents( 'autocompletion/'.$champ.'.php', $code );
	}
	}


ça donnes un code assez laid mais ça marche!

Merci à tous pour votre aide!!
Modifié par aurelien78 (18 Apr 2010 - 23:17)