Erreur php
Résolu/Fermé
A voir également:
- Erreur php
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
- Code erreur f3500-32 ✓ - Forum Bbox Bouygues
- Retour a la ligne php ✓ - Forum PHP
1 réponse
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
Modifié par Reivax962 le 8/10/2012 à 14:48
Modifié par Reivax962 le 8/10/2012 à 14:48
Bonjour,
Certaines fonctions agissent sur les en-têtes HTTP de la réponse.
C'est par exemple le cas des fonctions setcookie(), session()...
Or lorsque PHP tombe sur une instruction de sortie (type « echo », mais aussi l'affichage d'une erreur, ou une zone de texte en dehors de <?php et ?>), il commence à envoyer la réponse. Les en-têtes étant, par définition, envoyées en premier, PHP est obligé de générer et envoyer les en-têtes HTTP dès qu'il tombe sur une instruction de sortie.
Résultat, si, plus bas dans le code, une fonction demande explicitement de modifier les en-têtes, PHP est coincé : il les a déjà envoyées et ne peut donc plus les modifier.
D'où ton message d'erreur, assez explicite quand on a compris le fonctionnement : « Cannot modify header information - headers already sent ».
Pour trouver ton problème, maintenant, il s'agit de trouver l'endroit où les en-têtes ont été envoyées.
Normalement, le message d'erreur que tu as tronqué donne le numéro de ligne.
Sans voir le code correspondant, il est difficile de répondre, mais les pièges typiques sont :
- Un message d'erreur envoyé plus haut dans ta page ;
- Une zone (ligne blanche, caractère, etc.) situé en dehors des balises <?php et ?>. Par exemple, si ta première balise <?php est située sur la deuxième ligne de ton script, le moteur PHP commencera par envoyer au navigateur le contenu de ta première ligne, même si elle est vide !
- Le piège pénible : si ton fichier est encodé en UTF-8 standard, il contiendra au tout début quelques caractères (appelés BOM) qui sont invisible dans ton éditeur de texte ! Et pourtant PHP les voit et les enverra comme faisant partie de la réponse. La solution est d'encoder en « UTF-8 sans BOM » (aussi appelé « UTF-8 as ANSI »)
Bon courage,
Xavier
Certaines fonctions agissent sur les en-têtes HTTP de la réponse.
C'est par exemple le cas des fonctions setcookie(), session()...
Or lorsque PHP tombe sur une instruction de sortie (type « echo », mais aussi l'affichage d'une erreur, ou une zone de texte en dehors de <?php et ?>), il commence à envoyer la réponse. Les en-têtes étant, par définition, envoyées en premier, PHP est obligé de générer et envoyer les en-têtes HTTP dès qu'il tombe sur une instruction de sortie.
Résultat, si, plus bas dans le code, une fonction demande explicitement de modifier les en-têtes, PHP est coincé : il les a déjà envoyées et ne peut donc plus les modifier.
D'où ton message d'erreur, assez explicite quand on a compris le fonctionnement : « Cannot modify header information - headers already sent ».
Pour trouver ton problème, maintenant, il s'agit de trouver l'endroit où les en-têtes ont été envoyées.
Normalement, le message d'erreur que tu as tronqué donne le numéro de ligne.
Sans voir le code correspondant, il est difficile de répondre, mais les pièges typiques sont :
- Un message d'erreur envoyé plus haut dans ta page ;
- Une zone (ligne blanche, caractère, etc.) situé en dehors des balises <?php et ?>. Par exemple, si ta première balise <?php est située sur la deuxième ligne de ton script, le moteur PHP commencera par envoyer au navigateur le contenu de ta première ligne, même si elle est vide !
- Le piège pénible : si ton fichier est encodé en UTF-8 standard, il contiendra au tout début quelques caractères (appelés BOM) qui sont invisible dans ton éditeur de texte ! Et pourtant PHP les voit et les enverra comme faisant partie de la réponse. La solution est d'encoder en « UTF-8 sans BOM » (aussi appelé « UTF-8 as ANSI »)
Bon courage,
Xavier
8 oct. 2012 à 15:11
Modifié par 2012 le 8/10/2012 à 15:21
8 oct. 2012 à 15:21