2010-10-13 17 views

Répondre

2

Parce qu'il retourne vrai ou faux.

var_dump(headers_sent()); 

doit afficher (l'un ou l'autre ci-dessous)

bool(true) 
bool(false) 

Il travaille, il ne veut tout simplement pas le texte de sortie, si elle est fausse, comme il est un texte non il est une valeur boolean. L'utilisation générale de cette fonction est destinée à une instruction if, pas une déclaration d'affichage, si vous voulez afficher utiliser simplement le ternary operator

echo (headers_sent())?'true':'false'; 

Modifier

Merci à Victor pour me corriger: Il retournera 1 si vrai, une chaîne vide si faux.

Mise à jour

Pourquoi headers_sent() return false? Eh bien, pour préciser que je vais poster du manuel:

headers_sent - Indique si les en-têtes ont été envoyés

En fait, lorsque vous avez une sortie, qui envoie les en-têtes automatiquement au navigateur et commence le corps. Par exemple:

<?php 
echo "test"; 
echo headers_sent(); // should yield 1 
?> 

Cela devrait afficher 1, puisque nous avons eu une déclaration d'écho pour l'appel headers_sent.

<?php 
echo headers_sent(); // should yield empty string 
?> 

qui affiche une chaîne vide, étant donné qu'aucune sortie est avant l'appel headers_sent(). Le ci-dessus suppose que output_buffering est désactivé. Comme output_buffering étant sur elle enregistre toutes les sorties jusqu'à ce que le script soit terminé, puis affiche cette sortie, ainsi l'étiquette d'en-tête/corps est envoyée à la fin du script.

Espérons que cela l'efface. Sinon, consultez le lien du manuel que j'ai posté ci-dessus et lisez les exemples du manuel.

+0

Conversion'on' à une chaîne devrait donner ... '1' absence de sortie indique que la fonction retourne 'false' (qui donne une chaîne vide). –

+0

La valeur true est imprimée de la manière suivante: '1' – thomas

+0

var_dump (headers_sent()); == 'bool (false)' – thomas

0

Cela peut se produire si ob_start a été appelée avant que le code que vous avez montré ait été exécuté.

+0

ob_start n'a pas été appelé ... c'est tout le code. – thomas

3

Regardez votre php.fichier de configuration ini et rechercher la ligne contenant output_buffering et assurez-vous qu'il ressemble à:

output_buffering = Off

Si vous avez Off, echo headers_sent() devrait afficher 1

Si vous l'avez sur alors echo headers_sent() ne sera pas sortie car headers_sent() retournera FALSE dans ce cas, car les en-têtes (ce qui ne signifie pas HTML <h1> mais les en-têtes de réponse HTTP) n'ont pas encore été envoyés car la sortie est mise en mémoire tampon.

Pour forcer l'envoi d'en-têtes et écho-ed de sortie jusqu'à présent, vous pouvez appeler flush()

+0

output_buffering = 4096 – thomas

+0

Vous aviez raison. Quelles sont les conséquences de cette directive? – thomas

+0

Si elle est désactivée et que vous n'avez pas appelé ob_start(), le premier écho (ou print ou toute autre commande entraînant la sortie) commencera à envoyer une réponse au navigateur des clients, ce qui vous empêchera d'utiliser les fonctions http (header) setcookie() - l'appel de ces fonctions entraînera une erreur "en-têtes déjà envoyés" –