Dans PHP, la fonction d'en-tête () est utilisée pour envoyer des informations d'en-tête HTTP d'origine, telles que la redirection, la définition de cookies, la modification des types de contenu, etc. Cependant, les informations d'en-tête HTTP doivent être envoyées avant toute sortie réelle (telle que HTML, écho, imprimé, etc.) ou une erreur sera lancée. En effet, une fois la sortie démontr, PHP enverra automatiquement l'en-tête HTTP.
Pour éviter les erreurs lors de l'appel d'en-tête () , nous pouvons utiliser la fonction en tête_sent () pour détecter si l'en-tête a été envoyé.
Headers_Sent () est une fonction intégrée fournie par PHP pour vérifier si des informations d'en-tête HTTP ont été envoyées au navigateur. Son utilisation de base est la suivante:
if (!headers_sent()) {
header('Location: https://m66.net/some-page');
exit;
}
Si l'en-tête n'a pas encore été envoyé, Headers_Sent () retourne faux , indiquant que l'en-tête () peut être appelé en toute sécurité; Si cela est vrai , cela signifie que l'en-tête a été envoyé et une erreur sera signalée lors de l'appel de l'en-tête () .
headers_sent () peut également accepter deux paramètres pour obtenir la position (fichier et numéro de ligne) de la sortie d'en-tête:
if (headers_sent($file, $line)) {
echo "HTTP La tête est déjà là $file Le premier du document $line Envoi de ligne。";
} else {
header('Location: https://m66.net/some-other-page');
exit;
}
Cette méthode convient particulièrement au débogage et vous aide à trouver l'emplacement du code à sortir à l'avance.
Avant de faire une redirection, vous devez vous assurer qu'il n'y a pas de sortie:
if (!headers_sent()) {
header('Location: https://m66.net/login');
exit;
} else {
echo "Incapable de rediriger,Parce qu'il y a déjà une sortie。";
}
De même, Setcookie () s'appuie sur des en-têtes HTTP, alors vérifiez-le également:
if (!headers_sent()) {
setcookie('user', 'JohnDoe', time() + 3600, '/');
} else {
echo "Impossible de régler cookie,Parce que l'en-tête a été envoyé。";
}
Si vous rencontrez souvent des erreurs d'enregistrement d'en-tête, envisagez d'activer la tampon de sortie au début du script:
ob_start();
De cette façon, toutes les sorties entreront d'abord dans le tampon, plutôt que de l'envoyer au navigateur immédiatement jusqu'à ce que le script soit terminé ou que l'OB_END_FLUSH () soit appelé, vous donnant plus de temps pour envoyer des informations d'en-tête en toute sécurité.