Pb header et pseudo-frames [PHP] - PHP - Programmation
Marsh Posté le 23-10-2002 à 00:54:06
kill9 a écrit a écrit : Bonsoir a tous. Voila, j'ai un probleme avec mes scripts car je ne peux utiliser les headers car ma page est inserée dans le tableau d'une autre page (pseudo-frame) et donc les en têtes sont deja chargé. J'ai lu en effectuant une recherche sur le forum que l'on pouvait dans ce cas utiliser la fonction ob_start(), mais malgré mes recherhes sur googles, je n'ai pas trouver d'explications claires sur les diverses utilisations. Et j'ai eu beau chercher dans mes 2 livres PHP (PHP4 l'intro, PHP Professionnel) je n'ai rien trouvé au sujet de cette fonction (ou alors il est leur d'aller au lit). Donc: 1° Comment utiliser la fonction ob_start() puisque c'ets la apparement la seule solution si je ne change pas la construction des pages ? 2° Dans le cas ou je voudrais utiliser la fonction header(), existe il une autre methode pour la construction de mes pages que celle que j'utilise actuellement actuelle = index + include (page) envisagé = header + include(page (avec header) + footer 3° Comment me passer des pseudo-frames ? 4° Est il plus "sûr" d'afficher le chemin reel (www.monsite.com/dl.php) ou masqué (www.monsite.com/rub=1) ? Merci d'avance pour vos reponses. |
1° Pour ce que j'ai compris, (j'utilise pas ob_start) ob_start() remet à plus tard l'envoie du texte au navigateur, les entête lui sont quand même envoyé.
Ce qui est mis en attente est envoyé au moment du ob_stop() ou a la fin du script.
2° ce que je fais moi (en simplifiant) : une variable dans laquelle je mets le texte à renvoyer au navigateur. Je concatènes tout au fur et à mesure et j'envoie le résultat tout à la fin. De cette manière,, je peux faire des header n'importe quand (utile dans le cas ou des donées sont envoyé au cookie au milieu du script)
Bon, en pratique, j'ai fait un peu plus compliqué vu que j'ai mis en place une gestion de modèle, donc plusieurs fonctions et plusieurs variables mais le principe est le même. (envoie du résultat tout à la fin)
3° l'avantage des pseudos frames est de pouvoir réutiliser très facilement du code sans l'avoir en plusieurs exemplaires.
pour pas en utiliser, il n'y a que deux solutions : 1) avoir tout le code exécuté par une action donnée dans un seul et même fichier. 2) utiliser des frames (dans le cas ou ta pseudo frame ne correspond qu'à une zone de ta page)
4° le chemin masqué est très légèrement plus sur si t'as prévus d'affiché une page dans le cas où celle rentré ne coresponde à rien. C'est plus sur car ca empêche les visiteurs de voir comment t'as organisé ton site et donc si t'as disposé le code dans plusieurs dossiers ils ne conaitront jamais l'arborescence de ton système. C'est plus sur aussi car les visiteurs ne pouront pas ddétecter sur quel script php est basé ton site en regardant les fichiers utilisé.
De plus ca permet de faire des mises à jour transparentes sans perdre le code de la version précédante (il sufit d'avoir les deux versions dans des fichiers diférents et de passer de l'un à l'autre en modifiant les référances au niveau de la page de départ)
De rien.
Marsh Posté le 23-10-2002 à 10:32:10
Merci pour tes reponses
Juste une precision.
Meme sis je concatene tout dans une variable que je balance a la fin de l'execution de ma page, les entetes sont deja envoyés puisque la 1ere page appellée est la page index
ex:
Code :
|
J'ai simplifier au max en virant les table tr td pour ne pas avoir un message de 3km de long.
Donc cette page appelle un page par defaut puisque si on arrive sur le site, la vaiable $page n'a pas de valeur.
si on clique sur un des elements du menu, cela appelle d'abord le fichier ci dessus qui transmet la valeur du lien a $page.
Donc meme si dans mon script, je concatene dans une variable que je transmete a la fin de celui-ci, les fonctions header() seront envoyées après l'envoi des entetes.
Je me goure ?
Marsh Posté le 23-10-2002 à 12:20:02
kill9 a écrit a écrit : Merci pour tes reponses Juste une precision. Meme sis je concatene tout dans une variable que je balance a la fin de l'execution de ma page, les entetes sont deja envoyés puisque la 1ere page appellée est la page index ex:
|
Ben là, t'as déjà du code html avant le début de ton code php ce qui fait que de toute manière tu ne peux jamais envoyer de header.
Une solution pour utiliser la variable est de modifier ton code pour obtenir à peut près ceci (pas tester donc il reste surement des erreurs):
Code :
|
Dans tes includes, tu continues à compléter la variable $page et comme ça, c'est le script de départ qui s'occupe de tout envoyé.
Marsh Posté le 23-10-2002 à 12:27:58
oui mais en faisant ca
la personne qui travail avec dreamweaver ne peut plus bosser reelement.
On est deux dessus.
moi pour le PHP lui pour l'html
et là pour lui ca se complique serieusement
c'est pour cela que je ne peux pas reelement faire ce que je veux.
Marsh Posté le 23-10-2002 à 12:29:51
c'est à ça que servent les templates...
Marsh Posté le 23-10-2002 à 12:45:45
ethernal a écrit a écrit : c'est à ça que servent les templates... |
Je te laisse lui expliquer tout ça.
Marsh Posté le 23-10-2002 à 12:49:17
oui explique les templates
mais meme si je ne suis pas completement abruti
ca va etre un peu dur vu mon niveau, enfin, je pense
Marsh Posté le 23-10-2002 à 13:21:59
heu trop sympa omega2
bha en gros :
- tu charges un (ou plusieurs) fichier .html qui contient que du html et des {TAG}.
- Tu charges les correspondancres entre le tag et la valeur issue de php (bd, traitement...).
- Tu remplaces le tout dans le fichier html.
- Tu affiches.
tu vois que c'est facile
en réalité, tu as des classes de templates qui s'occupent de tout, tu dois juste spécifier les fichiers "modèles", et les correspondances entre le tag et la valeur. tout le reste derrière est transparent.
Le problème c'est choisir la classe de template :
- En fonction de tes affinités
- en fonction de la vitesse (bha oui, ça bouffe pas mal qd même)
- en fonction du codeur html (genre smarty ou d'autres font des choses pas très catho dans leur templates (boucles, if then else, ...) évidemment ils sont plus rapides.
Marsh Posté le 23-10-2002 à 13:50:36
A tout KOMPRI
bon aujourd'hui j'aurais pas le temps
demain je teste ca
Merci.
Marsh Posté le 23-10-2002 à 14:17:27
ethernal a écrit a écrit : heu trop sympa omega2 bha en gros : - tu charges un (ou plusieurs) fichier .html qui contient que du html et des {TAG}. - Tu charges les correspondancres entre le tag et la valeur issue de php (bd, traitement...). - Tu remplaces le tout dans le fichier html. - Tu affiches. tu vois que c'est facile en réalité, tu as des classes de templates qui s'occupent de tout, tu dois juste spécifier les fichiers "modèles", et les correspondances entre le tag et la valeur. tout le reste derrière est transparent. Le problème c'est choisir la classe de template : - En fonction de tes affinités - en fonction de la vitesse (bha oui, ça bouffe pas mal qd même) - en fonction du codeur html (genre smarty ou d'autres font des choses pas très catho dans leur templates (boucles, if then else, ...) évidemment ils sont plus rapides. |
Et en fonction des besoins du site au niveau affichage. (certain système de template permettent plus de truc que d'autres)
Marsh Posté le 23-10-2002 à 14:21:21
omega2 a écrit a écrit : Et en fonction des besoins du site au niveau affichage. (certain système de template permettent plus de truc que d'autres) |
tu entends quoi par là ?
Marsh Posté le 23-10-2002 à 14:31:07
ethernal a écrit a écrit : tu entends quoi par là ? |
Pour mon site, le système de template que j'avais utilisé était limité à une série de colone et des données dans chaque colone.
Mon système actuel permet de diviser l'affichage autant de fois qu'on veut en hauteur et largeur et ce de manière récursive.
Mon premier système ne permettait pas de spécifier une couleur pour une case donné d'un tableau et le nombre de couleur possible pour une ligne donnée du tableau ce fesait parmis deux choix (les deux couleurs étaient définis au niveau du modèle)
Dans mon système actuel, on peut spécifier autant de couleur qu'on veut au niveau du modèle, on peut donnér à une case donné une couleur autre que celle du reste de la ligne et au niveau du modèle, on peut désigner (pour les cases ou on force telle couleur) un ensemble de choix de couleurs diférentes de celle qu'on a pour la ligne.
Bref, d'un système à l'autre, j'ai fait sauté des limitations.
C'est de ça que je parles. Si la charte graphique de son site spécifie certaines règles, il faut que le système de template qu'il utilise permette d'obtenir un affichage conforme à ces règles là.
Marsh Posté le 23-10-2002 à 16:15:07
et donc juste un detail
tu utilise quel systeme ?
Donc mon bouquin, ils abordent Fast Template, mais j'ai lu qu'il y en avit d'autres comme PHPlib et MALA..etc
etant donné que je rique d'avoir le meme pb que tu as rencontré, merci de me donner le nom du system de template utilisé.
Marsh Posté le 23-10-2002 à 16:28:11
kill9 a écrit a écrit : et donc juste un detail tu utilise quel systeme ? Donc mon bouquin, ils abordent Fast Template, mais j'ai lu qu'il y en avit d'autres comme PHPlib et MALA..etc etant donné que je rique d'avoir le meme pb que tu as rencontré, merci de me donner le nom du system de template utilisé. |
Ben en fait, je ne fait qu'utiliser celui que j'ai concus moi.
Tu risques pas d'y tomber dessus vu qu'on est que deux à en avoir les sources et qu'aucun de nous deux ne les a mis en libre accés sur le net.
Je lui ai pas donné de nom particulier vu que ce n'est qu'une partie d'un ensemble de système sur lequel est basé mon site. Par contre, j'ai donné un nom à l'ensemble de ces systèmes (gestion de module, gestion de modèle, gestions des smilies, ... ) et c'est Bechat. (du nom de mon site en fait)
Marsh Posté le 23-10-2002 à 16:47:11
kill9 a écrit a écrit : c koi l'url ? c pas http://www.bechat.be.tf |
Gagné.
Bon, c'est sur qu'avec le nom du site, il y avait peut de chance de tomber sur un autre site mais c'est rare que quelqu'un le trouve aussi vite s'il le conaissait pas avant.
Marsh Posté le 24-10-2002 à 09:37:36
arf ! merci mais j'ai pas de merite entant donné que j'ai fais sur google recherche "bechat" sur les pages françaises et que c'etait le seul site de la liste a avoir ce nom de site.
EDIT :
Juste que la generation automatique de ta page au bout d'un certains temps se produit sans la "css" ou le "toolkit"
Marsh Posté le 24-10-2002 à 15:03:25
kill9 a écrit a écrit : arf ! merci mais j'ai pas de merite entant donné que j'ai fais sur google recherche "bechat" sur les pages françaises et que c'etait le seul site de la liste a avoir ce nom de site. EDIT : Juste que la generation automatique de ta page au bout d'un certains temps se produit sans la "css" ou le "toolkit" |
Heu, comment ça?
Bon, c'est vrai que dans la version publique, il y a encore quelques parties que j'ai pas modifié complètement et du coup, le choix d'un modèle particulié n'est pas valide partout (variable qu'est pas initialisé dans certaines section n'utilisant pas le système de gestion de modèle).
J'ai commencé à m'ateller à ce problème hier soir mais ne mettrais en ligne l'ensemble des modifs que cette nuit.
Il y a 5 pages que j'ai pas eu le temps de faire hier soir et elles se trouvent dans le chat et dans une section accéssible que par les admins.
Bref, si tu repasses dans les jours a venir, ca marchera surement mieux.
PS : Le réglage par défaut du modèle est : changement de modèle en fonction de l'heure. Tu peux changer le réglage pour en utiliser un en particulier en allant dans la section réglage mais bon, comme écrit plus haut, pour le moment, c'est un réglage qui est utilisé dans peu d'endroit dans la version actuellement publique du site.
Marsh Posté le 23-10-2002 à 00:26:22
Bonsoir a tous.
Voila, j'ai un probleme avec mes scripts car je ne peux utiliser les headers car ma page est inserée dans le tableau d'une autre page (pseudo-frame) et donc les en têtes sont deja chargé.
J'ai lu en effectuant une recherche sur le forum que l'on pouvait dans ce cas utiliser la fonction ob_start(),
mais malgré mes recherhes sur googles, je n'ai pas trouver d'explications claires sur les diverses utilisations.
Et j'ai eu beau chercher dans mes 2 livres PHP (PHP4 l'intro, PHP Professionnel) je n'ai rien trouvé au sujet de cette fonction (ou alors il est leur d'aller au lit).
Donc:
1° Comment utiliser la fonction ob_start() puisque c'ets la apparement la seule solution si je ne change pas la construction des pages ?
2° Dans le cas ou je voudrais utiliser la fonction header(), existe il une autre methode pour la construction de mes pages que celle que j'utilise actuellement
actuelle = index + include (page)
envisagé = header + include(page (avec header) + footer
3° Comment me passer des pseudo-frames ?
4° Est il plus "sûr" d'afficher le chemin reel (www.monsite.com/dl.php) ou masqué (www.monsite.com/rub=1) ?
Merci d'avance pour vos reponses.