Problème de "headers already sent"

Petit nouveau ! | 3 Messages

05 janv. 2012, 11:35

Bonjour à toutes et à tous!

J'ai parcouru le net à la recherche d'une solution, sans succès. Peut-être ai-je mal chercher... Mais bon.
J'ai un petit problème avec mon code. Je souhaite réaliser un site multilingue qui, quand on choisi la langue sur la page d'accueil, la stocke dans un cookie de façon à pouvoir récupérer le texte approprié dans la base de données.

En arrivant sur la page, on regarde si la langue est passée en paramètre (auquel cas, on la stocke dans le cookie) ou si le cookie existe. Si aucun des deux cas n'est vérifié, on redirige l'internaute vers la page d'accueil.

Le bout de code suivant est présent au début de toutes mes pages, sauf index.php.

Code : Tout sélectionner

<?php $duree=365*24*60*60; $langue=''; if(!isset($_GET['language']) && !isset($_COOKIE['langue'])){ header("location : index.php"); } elseif(isset($_GET['language']) && !isset($_COOKIE['langue'])){ $langue=$_GET['language']; setcookie('langue',$langue,time()+$duree); } else{ $langue=$_COOKIE['langue']; } require_once('fonctions/connexionbdd.inc.php'); //reste du code ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $langue; ?>"> </html>...
Une fois en ligne, je reçois l'erreur suivante (erreur qui n'empêche pourtant le reste de la page de s'exécuter normalement).
Warning: Cannot modify header information - headers already sent by (output started at /home/bfta/public_html/BFTArefonte/home.php:1) in /home/bfta/public_html/BFTArefonte/home.php on line 13
Je sais que ce genre d'erreur survient lorsque du HTML précède un header(). Pourtant, il n'y a aucun code HTML avant, aucun echo, rien... Je ne comprends pas.

Pouvez-vous m'aider, s'il vous plaît?
Merci d'avance.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

05 janv. 2012, 12:03

salut,

Afin de mieux comprendre le phénomène décortiquons le message d'erreur

Warning: Cannot modify header information : la c'est clair je peux pas modifier l'entête
headers already sent by (output started at /home/bfta/public_html/BFTArefonte/home.php:1) : l'entête est déjà envoyé (depuis la ligne 1 de home.php)
in /home/bfta/public_html/BFTArefonte/home.php on line 13 : l'erreur ce produit ligne 13 de home.php

le truc c'est que tous ce qui est envoyé, et considéré comme affichage, au navigateur déclenche l'envoie de l'entête. or il existe ce que l'on appel des caractères non imprimable (saut de ligne espace, tabulation etc) qui sont, au final, de l'affichage, mais que tu ne vois pas.

donc la clairement tu a soit
- un espace
- une ligne
- un autre caractère a la mord moi le nœud
qui se trouve avant le <?php

le cas plus plus vicieux c'est l'utilisation de l'encodage utf-8 pour le fichier. car si tu choisis UTF-8 tous bête il y a des caractères qui viennent mettre le brin dans la chose, il faut choisir (si tu en a la possibilité) UTF-8 sans BOM.
Un éditeur de texte comme notepad++ sais très bien le faire.


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 209 Messages

05 janv. 2012, 12:04

Vérifie que tes fichiers ne sont pas encodés en UTF-8 avec BOM.

Petit nouveau ! | 3 Messages

05 janv. 2012, 12:20

Oh! Bon sang, ça marche!!
Mille merci à vous deux! :)

Du coup, une question me vient: qu'est-ce que l'encodage avant ou sans BOM? Ou, tout simplement, qu'est-ce que le (la? les?) BOM?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

05 janv. 2012, 14:14

Merci wikipedia ;)
Vérifie que tes fichiers ne sont pas encodés en UTF-8 avec BOM.
le cas plus plus vicieux c'est l'utilisation de l'encodage utf-8 pour le fichier. car si tu choisis UTF-8 tous bête il y a des caractères qui viennent mettre le brin dans la chose, il faut choisir (si tu en a la possibilité) UTF-8 sans BOM.

................
Il en faut peu pour être heureux ......

Eléphant du PHP | 209 Messages

05 janv. 2012, 15:03

Yep tu m'as devancé d'une minute :lol:

Petit nouveau ! | 3 Messages

05 janv. 2012, 15:10

Pardon, je n'y avais pas pensé. :oops:
Merci encore, en tout cas. :)