2010-06-10 16 views
2

comment est-ce que je peux placer des biscuits au milieu d'un document, sans encourir une erreur de «en-têtes déjà envoyée»? Ce que j'essaye de faire est de faire un script de déconnexion (le paramètre de cookie de connexion fonctionne ... si étrange, est-ce parce qu'il est inclus dans une instruction if?) Mais j'ai déjà fait écho le titre de la page et d'autres choses en haut de la page, avant que j'aie fait cette déconnexion.Comment configurer les cookies via PHP au milieu d'un document?

Merci!

+1

Qui downvoting tout sans poster des commentaires? – animuson

+0

* hausse les épaules *, je voudrais savoir =/ – Sam

+0

Désolé c'était une erreur. –

Répondre

7

La façon la plus simple est d'utiliser output buffering pour arrêter PHP d'envoyer des données au client jusqu'à ce que vous êtes prêt

<?php 
ob_start(); 
// your code 
ob_end_flush(); 
?> 

stocke en mémoire tampon de sortie toutes les données en sortie jusqu'à ce que le tampon est vidé, et envoie ensuite tout à Une fois, tous les échos après le start resteront tamponnés jusqu'au end_flush, puis envoyés

+0

Merci merci thankyou = D! – Sam

7

Essayez de décomposer votre application en deux parties:

D'abord, vous enlevez le cookie, vous redirigez l'utilisateur sur la page de résultats. C'est un moyen commun de travailler.

Essayez également d'utiliser un cadre dans votre développement, il permettra d'améliorer vos compétences et la maintenabilité de votre code.

+3

+1 pour recomposer. Définir des cookies au milieu de * sortie * (pas au milieu du document, bien sûr) est un non-sens. –

+1

Je vais regarder dans un cadre :). – Sam

2

Les cookies sont envoyés dans les en-têtes, qui sont envoyés avant toute autre chose. Par conséquent, si vous avez réellement «répercuté» quelque chose au client (navigateur), vos en-têtes ont également été envoyés.

Cela dit, vous pouvez tamponner votre sortie et envoyer tout une fois que tout le code a été exécuté (ob_start() et ob_end_flush())