Ocaeph Posté(e) le 14 mars 2006 Partager Posté(e) le 14 mars 2006 Bonjour, J'ai un problème de cookie, quand la ligne est présente: setcookie("lang", $lang, time()+604800); J'obtiens l'erreure suivante: Warning: Cannot modify header information - headers already sent by (output started at /www/index.php:38) in /www/index.php on line 44 Mais si j'enlèves la déclaration du cookie, ca marche bien. Ce qui est bizarre c'est que j'utilisais easyphp et ca marchait très bien, et là je suis sur un serveur Unix et depuis j'ai cette erreure Merci de votre aide!!! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 14 mars 2006 Partager Posté(e) le 14 mars 2006 Selon la doc PHP : setcookie() définit un cookie qui sera envoyé avec le reste des en-têtes. Les cookies doivent passer avant tout autre en-tête (c'est une restriction des cookies, pas de PHP). Cela vous impose d'appeler cette fonction avant toute balise <html> ou <head>. Ta fonction setcookie est-elle bien appelée avnt tout envoi de données vers le navigateur ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ocaeph Posté(e) le 14 mars 2006 Auteur Partager Posté(e) le 14 mars 2006 <?php if(isset($_COOKIE['lang'])) { $lang = $_COOKIE['lang']; } else { $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2); } if ($lang=='fr') { include('fr/fr-lang-compta.php'); } elseif ($lang=='en') { include('en/en-lang-compta.php'); } $expire = 365*24*3600; setcookie("lang", $lang, time() + $expire); ?> Voici le code entier, merci pour le coup de main Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 14 mars 2006 Partager Posté(e) le 14 mars 2006 Hummm, et tout ce bloc est bien situé en tout début de la page ? Vérifie qu'il n'y a pas un espace ou une ligne blanche avant le <?php . De même, vérifie que le fichier 'en/en-lang-compta.php' ne renvoie pas d'informations textuelles (texte, espace, ligne blanche, etc), et qu'il ne positionne pas des headers. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Baldurien Posté(e) le 14 mars 2006 Partager Posté(e) le 14 mars 2006 Hummm, et tout ce bloc est bien situé en tout début de la page ? Vérifie qu'il n'y a pas un espace ou une ligne blanche avant le <?php . De même, vérifie que le fichier 'en/en-lang-compta.php' ne renvoie pas d'informations textuelles (texte, espace, ligne blanche, etc), et qu'il ne positionne pas des headers. Je te reprend : qu'il n'envoie pas de contenu :) Parce qu'envoyer des entêtes (en plus du cookie) c'est pas trop grave Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 14 mars 2006 Partager Posté(e) le 14 mars 2006 Si c'est grave, cf mon post plus haut qui cite la doc PHP :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Baldurien Posté(e) le 14 mars 2006 Partager Posté(e) le 14 mars 2006 nan !:) C'est pas les données les entêtes tout ce que tu envoie via header (ou setcookie), ce sont des entêtes. Le reste des données Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 14 mars 2006 Partager Posté(e) le 14 mars 2006 Je persiste : si, c'est grave Les cookies doivent passer avant tout autre en-tête (c'est une restriction des cookies, pas de PHP) (tiré de la doc PHP) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Baldurien Posté(e) le 14 mars 2006 Partager Posté(e) le 14 mars 2006 Ca m'étonne quand même comme restriction (j'admet avoir perdu), puisque c'est un entête comme une autre ... (Cookie: xxx; etc) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ocaeph Posté(e) le 14 mars 2006 Auteur Partager Posté(e) le 14 mars 2006 En faisant des recherches sur Google j'avais vu que c'était peut-etre des espaces en trop et j'ai enlever tout ce que je pouvais mais ca n'a rien changer Pour votre débat euhhhhh je comprends pas donc allez-y défoulez vous Lien vers le commentaire Partager sur d’autres sites More sharing options...
Baldurien Posté(e) le 15 mars 2006 Partager Posté(e) le 15 mars 2006 oui donc, j'ai demandé à mon prof :) à priori c'est une entête comme une autre, et y a pas d'ordre. Et en fait, la version anglais de php.net donne la réponse : http://fr.php.net/manual/en/function.setcookie.php setcookie() defines a cookie to be sent along with the rest of the HTTP headers. Like other headers, cookies must be sent before any output from your script (this is a protocol restriction). This requires that you place calls to this function prior to any output, including <html> and <head> tags as well as any whitespace. If output exists prior to calling this function, setcookie() will fail and return FALSE. If setcookie() successfully runs, it will return TRUE. This does not indicate whether the user accepted the cookie. Ce qui n'a pas du tout le même sens :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ocaeph Posté(e) le 15 mars 2006 Auteur Partager Posté(e) le 15 mars 2006 Si je comprends bien il faut que je mettes mon code php au tout début, avant <html>?? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Baldurien Posté(e) le 15 mars 2006 Partager Posté(e) le 15 mars 2006 http://bugs.php.net/bug.php?id=36746 =) C'est ce qu'on t'explique, oui. Les cookies font partie des entêtes HTTP. Si tu as une sortie texte - ici, du html - alors cela signifie que tu as fini d'envoyer les entêtes et que le client peut commencer à traîter les informations qu'il reçoit comme données, et non plus comme entête. Faut que tu vérifie dans ton code source où il y a des espaces avant <?php, ou après, ?>, et en fait où il y a des echo/print/espaces/code en dehors de <?php et ?> de manière à supprimer tout espace/etc qui serait avant le setcookie. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 15 mars 2006 Partager Posté(e) le 15 mars 2006 Marrant, les différences entre la version FR et la version EN : setcookie() defines a cookie to be sent along with the rest of the HTTP headers. Like other headers, cookies must be sent before any output from your script (this is a protocol restriction). setcookie() définit un cookie qui sera envoyé avec le reste des en-têtes. Les cookies doivent passer avant tout autre en-tête (c'est une restriction des cookies, pas de PHP). Le coup du cookie qui passe avant les autre headers semble donc être une erreur de traduction. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Baldurien Posté(e) le 15 mars 2006 Partager Posté(e) le 15 mars 2006 yep :) clairement hein Enfin, j'avais raison c'est l'essentiel Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 15 mars 2006 Partager Posté(e) le 15 mars 2006 Mince alors j'était persuadé de la même chose. Un mauvais point pour fr.php Lien vers le commentaire Partager sur d’autres sites More sharing options...
Baldurien Posté(e) le 15 mars 2006 Partager Posté(e) le 15 mars 2006 Faut pas s'en faire :) ça devrait être corrigé (j'ai reçu un mail disant que mon bug avait été corrigé) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.