Posté(e) le 14 mars 200619 a 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!!!
Posté(e) le 14 mars 200619 a 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 ?
Posté(e) le 14 mars 200619 a Auteur <?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
Posté(e) le 14 mars 200619 a 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.
Posté(e) le 14 mars 200619 a 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
Posté(e) le 14 mars 200619 a 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
Posté(e) le 14 mars 200619 a 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)
Posté(e) le 14 mars 200619 a Ca m'étonne quand même comme restriction (j'admet avoir perdu), puisque c'est un entête comme une autre ... (Cookie: xxx; etc)
Posté(e) le 14 mars 200619 a Auteur 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
Posté(e) le 15 mars 200619 a 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 :)
Posté(e) le 15 mars 200619 a Auteur Si je comprends bien il faut que je mettes mon code php au tout début, avant <html>??
Posté(e) le 15 mars 200619 a 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. Modifié le 15 mars 200619 a par Baldurien
Posté(e) le 15 mars 200619 a 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.
Posté(e) le 15 mars 200619 a Mince alors j'était persuadé de la même chose. Un mauvais point pour fr.php
Posté(e) le 15 mars 200619 a Faut pas s'en faire :) ça devrait être corrigé (j'ai reçu un mail disant que mon bug avait été corrigé)
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.