" dans la page d'inclusion ! ! 3. Le code PHP après l'en-tête sera également exécuté. Suite : Problème : De manière générale, le contenu d'entrée avant la fonction d'en-tête n'est pas avant la fonction d'en-tête."/> " dans la page d'inclusion ! ! 3. Le code PHP après l'en-tête sera également exécuté. Suite : Problème : De manière générale, le contenu d'entrée avant la fonction d'en-tête n'est pas avant la fonction d'en-tête.">

Maison  >  Article  >  développement back-end  >  Analyse et solutions aux causes de l'échec de l'en-tête PHP

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

黄舟
黄舟original
2017-02-28 09:33:021769parcourir

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) !

Déclaration:
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