March 14, 200619 yr 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!!!
March 14, 200619 yr 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 ?
March 14, 200619 yr Author <?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
March 14, 200619 yr 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.
March 14, 200619 yr 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
March 14, 200619 yr 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
March 14, 200619 yr 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)
March 14, 200619 yr Ca m'étonne quand même comme restriction (j'admet avoir perdu), puisque c'est un entête comme une autre ... (Cookie: xxx; etc)
March 14, 200619 yr Author 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
March 15, 200619 yr 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 :)
March 15, 200619 yr Author Si je comprends bien il faut que je mettes mon code php au tout début, avant <html>??
March 15, 200619 yr 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. Edited March 15, 200619 yr by Baldurien
March 15, 200619 yr 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.
March 15, 200619 yr Faut pas s'en faire :) ça devrait être corrigé (j'ai reçu un mail disant que mon bug avait été corrigé)
Archived
This topic is now archived and is closed to further replies.