OVH Cloud OVH Cloud

header + setcookies comment faire ?

6 réponses
Avatar
francois
Bonjour,

J'apprend le php et y a un truc que j'ai pas compris

Dans la doc il y a ecrit qu'une commande heaer doit forcement être
envoye en premier dans une page.

Idem pour une commande setcookies.


ALors comment on fair si dans la même page on veux envoyer une commande
header et une commande setcookies ?

Merci de votre aide.

6 réponses

Avatar
cepiat

Bonjour,

J'apprend le php et y a un truc que j'ai pas compris

Dans la doc il y a ecrit qu'une commande heaer doit forcement être
envoye en premier dans une page.

Idem pour une commande setcookies.


ALors comment on fair si dans la même page on veux envoyer une commande
header et une commande setcookies ?

Merci de votre aide.


On utilise un bufferisation de sortie ; )

ob_start();
Ton script
ob_end_flush();

@+
cepiat

Avatar
Benoit F
francois wrote:
ALors comment on fair si dans la même page on veux envoyer une commande
header et une commande setcookies ?


En fait ces deux commande permettent de completer l'entete HTTP. Comme
son nom l'indique c'est un entete, il précède donc le contenu qui lui
s'affiche dans le navigateur.
Php peut mettre des infos dans l'entete grace à header mais aussi
setcookie. Mais dés que tu fait un print ou un echo tu écrit dans le
corps du message.
C'est pour cela qu'il y a écrit dans le manuel que ces deux fonctions
doivent être obligatoirement avant tout affichage (et pas toute autre
fonction).

une solution autre solution consiste à utiliser ob_start() et
ob_end_flush() pour permettre de mettre les header n'importe où.


--
Benoit F.

Avatar
ED
cepiat wrote:
ALors comment on fair si dans la même page on veux envoyer une commande
header et une commande setcookies ?
On utilise un bufferisation de sortie ; )


ob_start();
Ton script
ob_end_flush();


Mais non mais non, pas besoin.

En fait dire que ça doit être envoyé en premier est un abus de langage,
pour simplifier.

Pour être plus précis, on doit faire appel à ces fonctions (ainsi qu'à
toutes celles qui peuvent agir sur les entêtes HTTP) avant d'envoyer le
mondre contenu sur la page.

Tant que tu ne fais aucun echo, aucun print, que tu ne sors pas des
balises PHP, que tu n'écris rien sur la page .... tu peux faire toutes
les actions que tu veux, faire tous les cookies que tu veux, envoyer des
entêtes HTTP avec header, initialiser le gestionnaire de session.

set_cookie(), header() ou session_start agissent au même niveau : dans
les entêtes HTTP. Si tu commences le contenu de la page tu ne pourras
plys y toucher, mais tant que ce n'est pas fait, aucun ordre n'est requis.

--
Eric Daspet
*
Vous cherchez une doc sur PHP 5 ? *PHP 5 avancé*, aux éditions Eyrolles
http://www.eyrolles.com/Informatique/Livre/9782212113235/-PHP-5-avance


Avatar
Noe
"francois" a écrit dans le message de
news:
Bonjour,

J'apprend le php et y a un truc que j'ai pas compris

Dans la doc il y a ecrit qu'une commande heaer doit forcement être
envoye en premier dans une page.

Idem pour une commande setcookies.


Je ne sais pas quelle traduction de la doc tu utilises, mais elle me paraît
plus ou moins farfelue. Sur PHP.net, on peut lire :

N'oubliez jamais que header() doit être appelée avant que le moindre contenu
ne soit envoyé, soit par des lignes HTML habituelles dans le fichier, soit
par des affichges PHP.

Donc, pas forcément en premier dans une page. Simplement, AVANT toute envoi
de contenu (inclusion HTML, echo, printf ...), ou avec protection par un
ob_start()...

ALors comment on fair si dans la même page on veux envoyer une commande
header et une commande setcookies ?


Pareil pour setcookie, à envoyer AVANT tout contenu. Sachant que header() ne
produit pas un contenu mais un en-tête, forcément, ça marche.

N.O.E.

Avatar
Vinz
et dans le genre de conneries que j'ai mis des heures à trouver quand je
débutais, il y a le classique "espace" avant la balise <? qui fait qu'on ne
peut plus envoyer les entêtes après.
à bon entendeur...

--
Vinz
Avatar
Fred
héhé :-)
tiens ca me rappelle pas mal de souvenir !

"Maaaaaaaaaais bon saaaaaaaang elle est vide mon entete !!!"
aaaaargfhhhhhhhhhhh !!
:-pp

"Vinz" a écrit dans le message de
news:cb69ma$q0f$
et dans le genre de conneries que j'ai mis des heures à trouver quand je
débutais, il y a le classique "espace" avant la balise <? qui fait qu'on
ne

peut plus envoyer les entêtes après.
à bon entendeur...

--
Vinz