Maison >développement back-end >Problème PHP >Que faire si l'en-tête php ne fonctionne pas

Que faire si l'en-tête php ne fonctionne pas

藏色散人
藏色散人original
2021-07-14 09:27:513102parcourir

Les méthodes pour l'en-tête PHP ne fonctionnent pas : 1. Supprimez l'espace entre l'emplacement et : : 2. Supprimez la sortie avant d'utiliser l'en-tête ; 3. Le code PHP après l'exécution de l'en-tête.

Que faire si l'en-tête php ne fonctionne pas

L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur DELL G3

Que dois-je faire si l'en-tête php ne fonctionne pas

Analyse des causes et solutions pour l'en-tête PHP ? échec

en PHP Lorsque vous utilisez header("location:test.php") pour sauter, veuillez faire attention aux points suivants :

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

2. Il ne peut 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 généré avant la fonction d'en-tête. Les fonctions similaires incluent setcookie() et les fonctions de session doivent ajouter des informations d'en-tête de message à la sortie. flux. . 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 le http l'en-tête du message à la fois les informations (header) et les informations sur le corps. L'en-tête du message http (de la fonction header() ou SetCookie()) n'est pas envoyé immédiatement, il est enregistré dans une liste. informations d'en-tête, y compris l'en-tête par défaut (comme un 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 appel print()), PHP doit d'abord envoyer tous les en-têtes, puis terminez l'en-tête HTTP. Ensuite, continuez 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'un des messages d'erreur ci-dessus sera envoyé.

Solution :

Modifiez php.ini pour ouvrir le cache (output_buffering), remplacez output_buffering=0 par output_buffering=4096

ou utilisez les fonctions de cache ob_start(), ob_end_flush(), etc. dans le programme. 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.

Apprentissage recommandé : "Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

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