Erreur php

Résolu/Fermé
2012 - Modifié par 2012 le 8/10/2012 à 14:15
 2012 - 8 oct. 2012 à 15:21
Bonjour, j'ai un problème par rapport mes cookies php, je reçoit cet erreur
Warning: Cannot modify header information - headers already sent by

mon code est :

__________________
....
if($remember == "yes"){
$var= base64_encode("g4enm2c0c4y3dn3727553$id");
setcookie('idCookie', $var, time() + 365*24*3600);
setcookie('passCookie', $pass, time() + 365*24*3600);
}

.....

_________________
Merci pour votre aide.

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
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
0
Merci beaucoup pour votre bon explication.
0
Merci beaucoup je résolu mon problème, je utiliser utf-8 sans bom a la place de utf-8.
0
Super!!!
0