<h1>Header</h1>
<?php
echo 'teste'; // output here
echo headers_sent(); // no output here!
?>
Pourquoi headers_sent() ne renvoie pas dans ce cas? Merci.La fonction php headers_sent ne fonctionne pas
<h1>Header</h1>
<?php
echo 'teste'; // output here
echo headers_sent(); // no output here!
?>
Pourquoi headers_sent() ne renvoie pas dans ce cas? Merci.La fonction php headers_sent ne fonctionne pas
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.
Cela peut se produire si ob_start
a été appelée avant que le code que vous avez montré ait été exécuté.
ob_start n'a pas été appelé ... c'est tout le code. – thomas
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()
output_buffering = 4096 – thomas
Vous aviez raison. Quelles sont les conséquences de cette directive? – thomas
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" –
Conversion'on' à une chaîne devrait donner ... '1' absence de sortie indique que la fonction retourne 'false' (qui donne une chaîne vide). –
La valeur true est imprimée de la manière suivante: '1' – thomas
var_dump (headers_sent()); == 'bool (false)' – thomas