Lorsqu'un navigateur accède à une page Web, le serveur établit d'abord la communication avec le navigateur via le protocole HTTP. Ce processus implique l'envoi d'informations d'en-tête HTTP et le contenu HTML ultérieur. Les informations d'en-tête HTTP contient non seulement des informations de base de la page Web (telles que le type de contenu, le jeu de caractères, etc.), mais détermine également comment le navigateur gère l'affichage de la page, le cache, le saut et d'autres comportements.
Dans PHP, nous utilisons la fonction en-tête () pour envoyer des en-têtes HTTP. Par exemple, le code suivant redirigera le navigateur vers une nouvelle page:
<?php
header("Location: http://m66.net/newpage.php");
exit;
?>
Lorsque ce code est exécuté, le serveur enverra un en-tête de redirection ( emplacement ) et le navigateur sautera en fonction de ces informations d'en-tête. À l'heure actuelle, le script PHP cessera d'exécuter (en raison de l'exit () ), donc le contenu HTML ultérieur ne sera pas sorti.
Dans PHP, l'en-tête HTTP doit être envoyé avant toute sortie HTML. En effet, les informations d'en-tête HTTP sont envoyées en premier par le serveur, et le contenu HTML est des données ultérieures. Si vous publiez d'abord le contenu HTML ou tout autre caractères dans PHP, puis appelez la fonction en-tête () , PHP rapportera une erreur, invitant les "en-têtes déjà envoyés".
Par exemple, le code suivant errera:
<?php
echo "Hello World!"; // Sortir HTML contenu
header("Location: http://m66.net/newpage.php"); // Essayez d'envoyer un en-tête de redirection
exit;
?>
Lorsque ce code est exécuté, un avertissement sera lancé, ce qui a suscité que l'en-tête ait été envoyé. La raison en est que l'instruction ECHO a sorti le contenu HTML, ce qui fait que l'en-tête HTTP n'est plus envoyé.
Dans le protocole HTTP, les informations d'en-tête doivent être envoyées avant le contenu de la page réel (HTML, images, CSS, etc.). Le navigateur décide comment gérer la page reçue en fonction des informations d'en-tête reçues. Par exemple, l'en-tête de localisation indique que le navigateur doit rediriger, tandis que le type de contenu indique au navigateur le type de contenu de la page actuelle.
PHP doit envoyer ces en-têtes via la fonction d'en-tête () avant de sortir du contenu HTML, car une fois que HTML commence à être envoyé au navigateur, le serveur ne peut plus modifier l'en-tête HTTP. Pour vous assurer que l'en-tête HTTP peut être modifié avec succès (comme la redirection), vous devez vous assurer que l'en-tête () est appelé avant toute sortie.
Bien que PHP exige que l'en-tête () soit appelé avant de sortir n'importe quel contenu HTML, dans certains cas, la tampon de sortie peut aider à résoudre ce problème. La mise en mémoire tampon de sortie permet à PHP de stocker le contenu HTML en mémoire avant de l'envoyer, afin qu'il ne soit pas affecté par le contenu de sortie lorsque les appels ultérieurs en tête () .
Des exemples de code utilisant la tampon de sortie sont les suivants:
<?php
ob_start(); // Allumez la tampon de sortie
echo "Hello World!"; // 仍然可以输出contenu
header("Location: http://m66.net/newpage.php"); // En-tête
exit;
?>
Dans le code ci-dessus, la fonction OB_START () permet la tampon de sortie, de sorte que même si le contenu est sorti après Echo , PHP n'envoie pas le contenu au navigateur immédiatement, mais les stocke dans le tampon. Cela vous permet d'appeler par la suite la fonction d'en-tête () pour modifier l'en-tête HTTP sans rencontrer l'erreur "En-têtes déjà envoyée".
Redirection de la page: Utilisez l'en-tête ("Emplacement: URL") pour rediriger l'utilisateur vers une autre page.
header("Location: http://m66.net/anotherpage.php");
exit;
Définissez le type de contenu: utilisez l'en-tête ("Contenu-Type: Type") pour définir le type de contenu de la page, par exemple:
header("Content-Type: application/json");
echo json_encode($data);
CONTRÔLE CACHE: Utilisez En-tête () pour définir le contrôle du cache pour indiquer si le navigateur doit mettre en cache une certaine page.
header("Cache-Control: no-cache, no-store, must-revalidate");
header("Pragma: no-cache");
header("Expires: 0");
La fonction d'en-tête () de PHP est utilisée pour envoyer des informations d'en-tête HTTP, et son ordre d'appel est crucial pour l'ordre de sortie de la page. Étant donné que l'en-tête HTTP doit être envoyé avant le contenu HTML, vous devez vous assurer que rien n'est sorti lors de l'appel d'en-tête () . Pour résoudre ce problème, la tampon de sortie peut être utilisée comme une solution efficace. Comprendre la relation entre la fonction d'en-tête () et l'ordre de sortie de la page aidera à éviter les erreurs et les comportements inattendus causés par un ordre d'appel incorrect.
En utilisant la fonction d'en-tête () et la tampon de sortie rationnellement, vous pouvez vous assurer que les scripts PHP fonctionnent comme prévu et éviter les erreurs inutiles.