Dans la programmation PHP, la fonction d'en-tête () est utilisée pour envoyer des informations d'en-tête HTTP brutes. Les scénarios d'application courants incluent la redirection des utilisateurs, la définition des en-têtes de contrôle de cache ou la modification des types de contenu. Cependant, il existe une limitation importante à l'utilisation de la fonction d'en-tête () - il ne peut y avoir de sortie avant d'appeler l'en-tête () . Sinon, PHP n'enverra pas correctement les informations d'en-tête et peut entraîner une erreur.
Exigences pour le protocole HTTP
Le protocole HTTP stipule que les informations d'en-tête doivent être envoyées avant l'organisme de réponse. Par conséquent, lorsque vous utilisez la fonction en-tête () , vous devez vous assurer que rien n'a été sorti au navigateur. Toute sortie (y compris le HTML, les espaces, les ruptures de ligne ou les messages d'erreur, etc.) entraînera l'envoi de PHP une partie du corps de réponse, empêchant ainsi l'envoi des informations d'en-tête. En d'autres termes, l'en-tête () doit être appelé avant toute sortie.
"Impossible de modifier les informations de l'en-tête" <br> Si quelque chose est sorti avant d'appeler la fonction en-tête () , PHP lancera une erreur: "AVERTISSEMENT: Impossible de modifier les informations d'en-tête - En-têtes déjà envoyées par ...". Cela signifie que PHP a commencé à envoyer du contenu de réponse et que les informations d'en-tête ne peuvent plus être modifiées ou envoyées. Cette erreur perturbe généralement la fonction normale du site Web, en particulier dans des scénarios tels que la redirection et la vérification de connexion.
Contrôle du cache
Lorsque PHP envoie des informations d'en-tête, vous pouvez utiliser en-tête () pour contrôler le cache, taper ou redirection. S'il y a une sortie, l'en-tête HTTP ne peut pas être défini comme prévu, ce qui peut entraîner des caches indésirables ou une redirection de page ne parvient pas à être correctement effectuée.
Assurez-vous qu'il n'y a pas de sorties vierges <br> Évitez les caractères ou les ruptures de ligne des espaces blancs au début et la fin d'un fichier PHP. En règle générale, ce problème se produit au début ou à la fin d'un fichier PHP, surtout avant ou après le < ? TAG PHP . Assurez-vous qu'il n'y a pas d'espaces ou de pauses de ligne au début et à la fin du fichier.
Par exemple, le code suivant crée des problèmes:
<?php
// erreur:Il y a des personnages vierges devant
header("Location: http://m66.net");
exit;
?>
La bonne façon est:
<?php
header("Location: http://m66.net");
exit;
?>
Utilisez ob_start () et ob_end_flush ()
PHP fournit un mécanisme de mémoire tampon de sortie qui permet de capturer tout le contenu de sortie avant d'envoyer une réponse réelle. En utilisant ob_start () , PHP commence à tamponner la sortie jusqu'à ce que OB_END_FLUSH () soit appelé. Cela vous permet d'appeler la fonction en-tête () avant de sortir quoi que ce soit.
Exemple:
<?php
ob_start(); // Démarrer la tampon de sortie
header("Location: http://m66.net"); // Maintenant en sécurité à utiliser header
ob_end_flush(); // Effacer le tampon et envoyer la sortie
exit;
?>
Évitez de produire des messages d'erreur <br> Pendant le développement, PHP affiche généralement un message d'avertissement ou d'erreur si une erreur se produit. Si les messages d'erreur sont sortis, ils affecteront l'envoi de l'en-tête. Pour éviter cela, vous pouvez désactiver la sortie d'erreur en configurant le fichier php.ini ou en utilisant la fonction ini_set () .
Configurer php.ini :
display_errors = Off
Utilisez ini_set () dans votre code:
<?php
ini_set('display_errors', 0); // 禁止erreur输出
header("Location: http://m66.net");
exit;
?>
Vérifiez les bibliothèques ou les frameworks tiers <br> Certaines bibliothèques ou frameworks tiers peuvent produire automatiquement du contenu ou effectuer un débogage pendant le traitement de la demande. À l'heure actuelle, vous pouvez vérifier la documentation ou le code source de ces bibliothèques pour vous assurer qu'ils ne publient pas de contenu avant d'appeler Header () . Certains cadres vous permettent de configurer les niveaux de journal ou les niveaux de sortie pour éviter ce problème.
Débogage de sortie <br> Au cours de la phase de développement, si vous avez besoin de déboguer, vous pouvez temporairement utiliser ob_start () pour la mise en mémoire tampon de sortie, ou commenter toutes les sorties une fois le débogage terminé pour s'assurer que les informations d'en-tête sont envoyées avant la sortie.
Lorsque vous utilisez la fonction d'en-tête () de PHP, assurez-vous de vous assurer que rien n'est sorti avant l'appel. Les espaces, les ruptures de ligne, le code HTML ou les messages d'erreur, etc. peuvent faire en sorte que PHP échoue correctement les informations d'en-tête. En utilisant rationnellement les tampons de sortie, en évitant les informations d'erreur de sortie et en planifiant soigneusement la structure du code, ce problème peut être évité efficacement, en s'assurant que la fonction d'en-tête () fonctionne normalement, atteignant ainsi la redirection correcte, le contrôle du cache et d'autres fonctions du site Web.
Étiquettes associées:
header