PHP : passer un fichier dans une chaine

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
Répondre
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

PHP : passer un fichier dans une chaine

Message par calimo »

Je cherche à faire passer le contenu d'un fichier dans une chaine. J'utilise la fonction file_get_contents :

Code : Tout sélectionner

$ecrire=file_get_contents($file);
Ça marche bien, la chaine prend le contenu exact du fichier. :)

Sauf que j'aimerais que ce fichier contienne des variables et que celles-ci soient remplacées par leurs valeurs... par exemple :

Code : Tout sélectionner

<body>
$contenu
</body>
J'aimerais que $contenu soit substitué à "$contenu"... pareil pour toutes les variables que contien(drai)t le fichier. Comment faire ? J'ai l'impression de partir complètement faux... quelqu'un a une idée ? Il y a surement une autre fonction que j'ai raté... :oops:
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message par Benoit »

C'est la fonction include que tu as raté ? :)

(avec l'ouverture d'un buffer avant et sa fermeture après si tu veux que la sortie passe dans une chaîne et non à l'écran)
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Message par calimo »

Oui surement. J'ai essayé

Code : Tout sélectionner

$ecrire=include($file);
mais ça ne marche évidemment pas... ça retourne 1 (ou 0 je pense en fonction de si ça fonctionne ou pas). Quelle est la technique ?
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message par Benoit »

Comme je viens de te le dire, avec ob_start() avant l'include, et puis $variable = ob_get_contents(). Il y a des exemples sur http://www.php.net/manual/fr/function.o ... ntents.php
chBok
Iguane
Messages : 991
Inscription : 17 oct. 2003, 19:17

Re: PHP : passer un fichier dans une chaine

Message par chBok »

calimo a écrit :Sauf que j'aimerais que ce fichier contienne des variables et que celles-ci soient remplacées par leurs valeurs... par exemple :

Code : Tout sélectionner

<body>
$contenu
</body>
Si je comprends ta question, tu lis un fichier comme une chaine de caractères dans une variables, ensuite tu veux remplacer à l'intérieur de cette variable toutes les entrées $<qqc> qui sont elles mêmes des variables de ton script.

Aïe, j'ai mal aux cheveux. A moins de passer par des expressions régulières pour isoler les textes $<qqc>, puis de convertir leur contenu, puis de réinjecter dans la chaine initiale...

:!: Trouve autre chose :) surtout si c'est pour écrire une page Web.
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Re: PHP : passer un fichier dans une chaine

Message par calimo »

Benoit a écrit :Comme je viens de te le dire, avec ob_start() avant l'include, et puis $variable = ob_get_contents(). Il y a des exemples sur http://www.php.net/manual/fr/function.o ... ntents.php
Merci ! Ça marche... sauf que évidemment ce n'est pas interprété :oops:
chBok a écrit :Si je comprends ta question, tu lis un fichier comme une chaine de caractères dans une variables, ensuite tu veux remplacer à l'intérieur de cette variable toutes les entrées $<qqc> qui sont elles mêmes des variables de ton script.
Oui, je veux faire comme un include mais au lieu de l'écrire je voudrais que ça passe dans une variable pour faire un fwrite :mrgreen:
chBok a écrit :Aïe, j'ai mal aux cheveux. A moins de passer par des expressions régulières pour isoler les textes $<qqc>, puis de convertir leur contenu, puis de réinjecter dans la chaine initiale...

:!: Trouve autre chose :) surtout si c'est pour écrire une page Web.
Pour en revenir à ce que je disais hier soir, après investigation, le $ecrire=include($file) a un comportement bizarre.

Si je fais un echo($ecrire); la variable écrire contient bien ce que je veux, interprété comme je veux. Par contre... je ne comprend pas pourquoi quand je fais le fwrite ça m'écris juste "1"... quelle est la différence ? J'écris mon fichier avec

Code : Tout sélectionner

if (!$handle = fopen($filename, 'x+')) {
	echo "Impossible d'ouvrir le fichier ($filename)";
	exit;
}
if (fwrite($handle, $ecrire) === FALSE) {
	echo "Impossible d'écrire dans le fichier ($filename)";
	exit;
}
echo "L'écriture de (<pre>$ecrire</pre>) dans le fichier ($filename) a réussi";
fclose($handle);
J'y comprend rien :oops:
chBok
Iguane
Messages : 991
Inscription : 17 oct. 2003, 19:17

Re: PHP : passer un fichier dans une chaine

Message par chBok »

calimo a écrit :[couic]Pour en revenir à ce que je disais hier soir, après investigation, le $ecrire=include($file) a un comportement bizarre.

Si je fais un echo($ecrire); la variable écrire contient bien ce que je veux, interprété comme je veux. Par contre... je ne comprend pas pourquoi quand je fais le fwrite ça m'écris juste "1"... quelle est la différence ?
La fonction fwrite te renvoie 1, qui correspond au nombre d'octet écrit :
fwrite retourne le nombre d'octets écrits ou FALSE en cas d'erreur.
Alors, pourquoi 1, simplement la valeur true affectée à ta variable $ecrire dans ton affectation avec include().

Ecrire $ecrire=include($file) n'est pas juste :!:
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Re: PHP : passer un fichier dans une chaine

Message par calimo »

chBok a écrit :Ecrire $ecrire=include($file) n'est pas juste :!:
Et pourtant ça marche dans un echo...

Il y a d'autres solutions ? Il va falloir que je regarde comment font des applications comme phpBB (ou peut-être des un peu plus simples :lol: j'ai juste besoin qu'il prenne un fichier et y ajoute quelques trucs)
martin
Varan
Messages : 1074
Inscription : 21 janv. 2004, 16:23

Message par martin »

Benoit et chBok t'ont donné la solution !

le fichier que tu traites ('inclus.php') :

Code : Tout sélectionner

<body>
<?php echo $contenu ?>
</body>
le fichier qui traite ('test.php');

Code : Tout sélectionner

<?php
$contenu ='mon machin';
ob_start();
$ecrire=include('inclus.php');
$monFichier=ob_get_clean();

echo $monFichier;
echo $ecrire;
?>
le contenu de la source générée est :

Code : Tout sélectionner

<body>
mon machin</body>
1
Si 'echo $ecrire;' te rencoie vraiment autre chose que 1, c'est un bug de la version que tu utilises ! Personnellement php 5.0.4 me renvoie bien 1.
martin
Varan
Messages : 1074
Inscription : 21 janv. 2004, 16:23

Message par martin »

juste, je précise que "$ecrire=include('inclus.php'); " n'était là que pour l'exemple, "include 'inclus.php'" est amplement suffisant, voire include_once ou require_once.
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Message par calimo »

Ça marche !
Je dois avouer que je n'avais pas tout à fait saisi cette histoire de "buffer", et j'avais raté la fonction ob_get_clean() qui rend les choses nettement plus concrètes :wink:

Merci à tous, c'est pile-poil ce que je voulais, je peux même faire d'autres includes dans le fichier inclus, parfait :lol: :wink:
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité