Page 1 sur 1
PHP : passer un fichier dans une chaine
Publié : 22 mai 2005, 21:47
par calimo
Je cherche à faire passer le contenu d'un fichier dans une chaine. J'utilise la fonction file_get_contents :
Ç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 :
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é...

Publié : 22 mai 2005, 21:55
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)
Publié : 22 mai 2005, 22:05
par calimo
Oui surement. J'ai essayé
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 ?
Publié : 22 mai 2005, 22:11
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
Re: PHP : passer un fichier dans une chaine
Publié : 22 mai 2005, 22:37
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 :
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.
Re: PHP : passer un fichier dans une chaine
Publié : 23 mai 2005, 08:35
par calimo
Merci ! Ça marche... sauf que évidemment ce n'est pas interprété
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
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

Re: PHP : passer un fichier dans une chaine
Publié : 23 mai 2005, 09:50
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

Re: PHP : passer un fichier dans une chaine
Publié : 23 mai 2005, 13:39
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

j'ai juste besoin qu'il prenne un fichier et y ajoute quelques trucs)
Publié : 23 mai 2005, 14:18
par martin
Benoit et chBok t'ont donné la solution !
le fichier que tu traites ('inclus.php') :
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 :
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.
Publié : 23 mai 2005, 14:25
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.
Publié : 23 mai 2005, 18:56
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
Merci à tous, c'est pile-poil ce que je voulais, je peux même faire d'autres includes dans le fichier inclus, parfait
