2010-06-24 4 views
10

Le titre est explicite. J'ai un peu d'expérience avec PHP, mais je ne sais pas comment la fonction header fonctionne entre ob_start() et ob_end_clean().Comment les en-têtes fonctionnent-ils avec la mise en tampon de sortie en PHP?

Considérez ceci:

ob_start(); 

echo "Some content"; 
header('X-Example-Header: foo'); 
echo "Some more content"; 

$output = ob_get_contents(); 
ob_end_clean(); 

echo $output; 

Est-ce que la fonction header ignorer la mise en mémoire tampon de sortie, et donc tous les en-têtes sont envoyés avant que le contenu, car il est echo ed après l'appel header?

Ou cela fonctionne-t-il d'une autre manière?

+1

* (référence) * ['ob_start'] (http://de2.php.net/manual/fr/fonction.ob-start.php) - Cette fonction activera la mise en mémoire tampon de sortie. Lorsque la mise en mémoire tampon de sortie est active, aucune sortie n'est envoyée par le script ** (autre que les en-têtes) **, mais la sortie est stockée dans un tampon interne. – Gordon

+0

Oh, hé, j'ai raté ça. Cela devrait m'apprendre à lire un peu plus près. Merci, Gordon. –

Répondre

14

Le header() ignore en effet la mise en mémoire tampon de sortie. Une partie de la raison d'utiliser la mise en mémoire tampon de sortie est que vous pouvez envoyer des en-têtes HTTP "hors service" puisque la réponse est mise en mémoire tampon. Vous ne pouvez pas envoyer d'en-têtes HTTP une fois que vous avez envoyé un type quelconque de sortie (sauf si cette sortie est mise en mémoire tampon).

Questions connexes