Analyse et solutions aux causes de l'échec de l'en-tête PHP

黄舟
Libérer: 2023-03-06 08:02:02
original
1748 Les gens l'ont consulté

Lorsque vous utilisez l'en-tête ("location:test.php") pour accéder à PHP, veuillez faire attention aux points suivants :

1 Il ne peut pas y avoir d'espace entre l'emplacement et. ":" , sinon une erreur se produira.

2. Il ne doit y avoir aucune sortie avant d'utiliser l'en-tête, y compris aucun espace après la balise "?>" dans la page d'inclusion ! !

3. Le code PHP après l'en-tête sera également exécuté.

Suite :

Problème : saisir le contenu avant la fonction d'en-tête

De manière générale, le contenu html ne peut pas être sorti avant la fonction d'en-tête. fonction d'en-tête, similaire aux fonctions setcookie() et de session, ces fonctions doivent ajouter des informations d'en-tête de message au flux de sortie. S'il y a des instructions telles que echo avant l'exécution de header(), lorsque header() est rencontré plus tard, une erreur « Avertissement : Impossible de modifier les informations d'en-tête – en-têtes déjà envoyés par… » sera signalée. C'est-à-dire qu'il ne peut y avoir de texte, de lignes vides, de retours chariot, etc. devant ces fonctions, et il est préférable d'ajouter la fonction exit() après la fonction header(). Par exemple, dans l'écriture incorrecte suivante, il y a une ligne vide entre les deux extraits de code PHP :

//Il devrait y avoir une ligne vide ici

Raison :

Lorsque le script PHP commence à s'exécuter, il peut envoyer simultanément des informations sur l'en-tête (titre) et le corps du message http. L'en-tête du message http (à partir de la fonction header() ou SetCookie()) n'est pas envoyé immédiatement. , au lieu de cela, il est enregistré dans une liste. Cela vous permet de modifier les informations d'en-tête, y compris l'en-tête par défaut (par exemple, l'en-tête Content-Type). Cependant, une fois que le script envoie une sortie sans en-tête (par exemple en utilisant HTML ou un print(). ) appel), alors PHP doit d'abord envoyer tous les en-têtes, puis terminer l'en-tête HTTP. Ensuite, continuer à envoyer les données du corps. À partir de ce moment, toute tentative d'ajout ou de modification des informations d'en-tête n'est pas autorisée, et l'une des erreurs ci-dessus. des messages seront envoyés.

Solution :

Modifier php.ini pour ouvrir le cache (output_buffering), changer output_buffering=0 en output_buffering=4096

ou dans le programme Utilisez les fonctions de cache ob_start(), ob_end_flush(), etc. Le principe est le suivant : lorsque output_buffering est activé, PHP n'envoie pas l'en-tête HTTP lorsque le script envoie la sortie. Au lieu de cela, il dirige cette sortie vers un cache à croissance dynamique (disponible uniquement dans PHP 4.0, qui dispose d'un mécanisme de sortie centralisé). Vous pouvez toujours modifier/ajouter des en-têtes, ou définir des cookies, car les en-têtes ne sont pas réellement envoyés. Lorsque tous les scripts se terminent, PHP enverra automatiquement les en-têtes HTTP au navigateur, puis enverra le contenu du tampon de sortie.

Ce qui précède est l'analyse et la solution des causes de l'échec de l'en-tête PHP. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!