2010-06-24 10 views
10

Il titolo è auto-esplicativo.Come funzionano le intestazioni con il buffer di output in PHP?

Ho un bel po 'di esperienza con PHP, ma non sono sicuro di come la funzione header funzioni tra ob_start() e ob_end_clean().

Considerate questo:

ob_start(); 

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

$output = ob_get_contents(); 
ob_end_clean(); 

echo $output; 

funziona il header ignorare il buffer di uscita, e quindi tutte le intestazioni spediti prima del contenuto, perché è echo cato dopo la chiamata header?

Oppure funziona in un altro modo?

+1

* (riferimento) * ['ob_start'] (http://de2.php.net/manual/en/function.ob-start.php) - Questa funzione attiva il buffering dell'output. Mentre il buffer di output è attivo, nessun output viene inviato dallo script ** (diverso dalle intestazioni) **, invece l'output è memorizzato in un buffer interno. – Gordon

+0

Oh, hey, mi è mancato. Questo dovrebbe insegnarmi a leggere un po 'più vicino. Grazie, Gordon. –

risposta

14

Il header() ignora effettivamente il buffering dell'output. Parte del motivo per utilizzare il buffer di output è che è possibile inviare intestazioni HTTP "fuori servizio" poiché la risposta è memorizzata nel buffer. Non è possibile inviare intestazioni HTTP dopo aver inviato alcun tipo di output (a meno che l'output non sia bufferizzato).

Problemi correlati