PHP accéder en début de script à une variable executée en fin de script ?
le 13/06/2007 à 14:59
Cart
En quoi l'option du buffer est crade ?
C'est l'unique solution a son problem
C'est crade si on peut faire autrement :) Et je suis persuadé qu'il peut faire autrement, revoir son script, etc.
C'est extrêmement rare d'avoir besoin d'un buffer pour faire du web (je ne vois pas dans quel cas cela peut être utile en fait).
le 13/06/2007 à 21:52
Bzh
Là, je ne vois pas en quoi c'est "crade"!
Génerer le code puis l'envoyer au navigateur n'est-ce pas le principe de fonctionnement du protocole http ? Donc, que php génère le code en envoyant de façon continu le contenu de la page ou bien que php génère le code en retardant l'output, je ne vois pas de différence notable !
Sinon, je veux qu'on m'explique ce qui m'échape là...
Ben c'est quoi l'intérêt de générer un truc, de le mettre en buffer, puis de le modifier, et peut être même de le modifier une seconde fois pour la déconne, puis de l'envoyer au navigateur ?
Autant bien le générer dès le départ : tu gagnes en temps d'affichage, en RAM et en CPU.
C'est clairement pas viable sur un gros portail ce genre de truc.
Ils ont tellement des problèmes de charge que les mecs génèrent carrément des pages html sur un disque dur pour éviter de trop faire travailler PHP (typiquement les news de yahoo).
Pour moi, pour du web, c'est pas logique d'utiliser ces features de buffer. Tu ne devrais jamais avoir à revenir en arrière.
PHP te permet de générer un "état" donné (une page html) ce que fera également ton buffer. On arrivera à la même chose : un contenu html fixe envoyé au navigateur : et pendant cette phase de transport, PHP n'a plus son mot à dire.
Car tu es d'accord que c'est seulement une fois que le contenu HTML est généré qu'il est envoyé au client.
Donc pourquoi perdre du temps avec l'étape buffer ?
Une des solutions pour conseiller burnedsoul, çà serait plutôt de faire tout son php avant la moindre balise HTML. Comme çà, sa variable, il l'aura plus haut dans son HTML.
le 13/06/2007 à 22:18
Bzh
Ah ? On ne parle pas de la même chose !
Je pensais au systême de mise en cache ( comme yahoo, et la methode que j'utilise ) afin de copier le code html généré dans un fichier et donc de ne plus regénérer la page pendant un certain temps défini !
Un systeme de cache quoi...
Je ne pensais surtout pas de modifier les donnés une fois générées.
D'ailleur, je ne vois même pas comment tu veux faire cela...
Regex ???
Un exemple me vient à l'esprit (car je suis sur que le problème de burnedsoul est trivial, et que c'est une connerie du genre).
Sur lephpfacile, quand on lit un sujet du forum, ca écrit le titre du sujet dans la balise <title> (qui se trouve donc en haut de la page).
Pour faire çà, forcement, si je fais un truc du genre :
<html>
<head>
<title>???</title>
</head>
<body>
bla bla
<?php
// selection du sujet
$titre_sujet = 'le sujet';
?>
</body>
</html>
Ben je vais être emmerdé.
Ai-je besoin pour autant de faire de la bufferisation ? Je ne pense pas.
Un simple code comme ceci suffirait :
<?php
// select du sujet
$titre_sujet = 'le sujet';
?><html>
<head>
<title><?php echo $titre_sujet; ?></title>
</head>
<body>
bla bla
</body>
</html>
Non ?
On s'est mal compris alors bzh ;)
Pour modifier les données avant de les envoyer au browser, tu peux utiliser des fonctions de bufferisation.
J'ai mis un lien sur un message précédent.
le 13/06/2007 à 22:33
Bzh
Et bien, il n'y en a aucune qui permet de MODIFIER le contenu du buffer...
Ou bien je ne la trouve pas.
Par contre il y a des fonctions très interressantes comme les fonctions pour l'url rewriting !
le 13/06/2007 à 23:47
Cart
J utilise un buffer de cette facon
TOutes mes pages sont envoye dans le meme fichier index (url_rewriting) qui gere tout ce bordel
1 - include le module qui se charge de tout ce ki va safficher au milieu de la page
2 - Afficher header (head css javascript)
3- affiche le buffer (see number 1)
4 affiche le footer
Lavantage c ke quand tu inclus le module tu as pas a mettre tout ce ke tu as afficher au milieu de la page dans une variable . Des simples echo suffissent
Avantage number two c ke en utilisant ob_gzhandler la page html envoyee est automagiquement gzipe
Je trouve pas ca trop crade moi .. differentes perspectives peut etre..
Je suis preneur si tu me dit ke ya dautre desavantages a faire ca comme ca
Tu aurais pu le faire autrement.
Ton index.php qui reçoit tous les hits de ton site ; j'imagine que dedans, tu as un gros switch pour savoir sur "quelle page" tu te trouves : une fois que tu as déterminé sur quelle page tu es, tu fais un include d'un fichier PHP qui gère le code (voir le html) de la dite page.
En faisant cet include, tu laisses cet index.php "lisible" car tu ne colles pas dedans tout le code du site.
Et rien n'empêche de faire un include header / footer juste avant et après cet "include de page".
Et la, ben c'est pareil, que des echo, "aucune page dans une variable".