Warning: Cannot modify header information – headers already sent by (…)

Warning: Cannot modify header information – headers already sent by (…)

Comment résoudre cette erreur? Cette phrase bizarre, d’un anglais obscur, ne vous est peut-être pas complètement inconnue… Il s’agit d’une erreur PHP assez commune.

Warning: Cannot modify header information – headers already sent by (…)

Les erreurs PHP sont sources d’angoisse pour qui n’y comprend rien. Mais comme dit le dicton:

La peur n’évite pas le danger

Alors, autant être bien préparé! Rassurez-vous, c’est moins compliqué que ça en a l’air.

Que signifie cette erreur ?

Littéralement, cette erreur indique que le « header » a déjà été envoyé. Mais c’est quoi le « header » ?
Quand une page est véhiculée sur le web, elle est identifiée par un ensemble de données rassemblé dans ce qu’on appelle le « header ». Cela n’a RIEN A VOIR avec le code compris entre les balises « <head> » du code source de votre page.
Et oui, ce n’était pas assez compliqué comme ça, il faut en plus que les mêmes noms soient employés plusieurs fois….

Vous savez à présent que le header a été envoyé deux fois…mais d’où ça vient ?

Quand intervient cette erreur ?

La plupart du temps, l’erreur « Warning: Cannot modify header information – headers already sent by (…) » est provoquée par l’envoie d’un espace blanc au milieu du code PHP. Et c’est tout ?

Oui c’est tout. C’est ça la programmation: une virgule en moins, un espace blanc en plus, et tout fiche le camp!

Comment résoudre l’erreur « Warning: Cannot modify header information – headers already sent by » ?

Si vous ne connaissez rien au code

Cette erreur peut survenir après l’ajout d’un plugin. Désactivez le plugin pour voir si tout revient dans l’ordre. Et si vous n’avez plus accès au back-office ? Comment faire ?

Heureusement, votre site sera toujours accessible en FTP. Munissez-vous de votre programme FTP favoris (FileZilla par exemple) et naviguez jusqu’au répertoire des plugins.

Sur WordPress, il s’agit de /wp-content/plugins mais cette manipulation est valable pour tous les sites web, qu’ils soient construits avec WordPress ou pas.

Renommez le dossier du plugin suspect. Le fait de renommer « casse » le chemin que votre site prenait pour faire fonctionner ce plugin. En conséquence: il est désactivé.

Si tout n’est pas rentré dans l’ordre à ce stade, essayez de désactiver d’autres plugins. Et concentrez-vous: êtes-vous sûr de n’avoir pas touché au code PHP ? Ne serait-ce qu’un seul fichier (functions.php par exemple)…

Pensez toujours à faire une sauvegarde (en téléchargeant TOUT votre site via FTP sur votre ordinateur) avant toute manipulation risquée.

Si vous êtes développeur ou bidouilleur

Vous avez sûrement inclus un espace blanc dans l’un de vos fichiers. Une astuce pour le retrouver plus vite ?

Cet espace blanc se situe:

  • soit en début de fichier: AVANT la balise  <?php
  • soit en fin de fichier: APRES la balise ?>

Vous vous doutez de la suite, il faut ouvrir chaque fichier et vérifier manuellement. Si vous avez une sauvegarde récente de votre site, vous pouvez comparer automatiquement vos fichiers avec ce logiciel gratuit.

Pourquoi cette erreur est-elle déclenchée ?

Cette explication est technique, elle vous permet de mieux comprendre comment fonctionne une page PHP.

Le code PHP est toujours écrit entre des balises PHP, comme ceci: creation de site web

Certains fichiers .php sont employés pour gérer l’affichage de vos pages ou de vos articles. En plus du code PHP, ils contiennent en dehors des balises PHP, du code HTML (ex: H1) qui sera affiché par le navigateur (on appelle ça une « sortie HTML »). Par exemple, pour afficher le titre d’une page: Warning Cannot modify header information
Typiquement, le fichier index.php qui représente la page d’accueil de votre site, fait partie de ces fichiers.

D’autres au contraire sont utilisés comme bibliothèques de fonctions et ne contiennent que du code PHP (Les utilisateurs de WordPress reconnaitront le cas de functions.php). Ces fichiers ne sont pas censés émettre de « sortie HTML ». Or, tout espace en dehors des balises PHP est considéré comme une sortie HTML: votre navigateur essayera de l’afficher et cela « cassera » votre code.

En résumé

Il ne doit y avoir aucun espace blanc ni saut de ligne en dehors des balises PHP, dans les fichiers qui ne gère pas l’affichage.

Vous savez à présent comment résoudre l’erreur « Warning: Cannot modify header information – headers already sent by ». La manipulation n’est pas forcément aisée mais cette explication vous donne une bonne base pour chipoter un peu et vous faire aider « en arrivant avec un bagage ». En effet, c’est toujours mieux, quand on se pointe sur un forum, d’avoir déjà un début de réponse.

Cannot modify header information, développeur, formation, PHP, webmaster

A propos de MarieEve Louvel

Depuis 3 ans, je partage mes connaissances sur ce blog, pour les entrepreneurs désireux de créer leur site vitrine et/ou leur blog professionnel avec WordPress. Mon expérience professionnelle va de l'accompagnement à la formation, en passant par de la création de site ou de logiciel. Retrouvez mes cours en ligne sur mon site FeelWeb Formation [http://feelwebformation.com]

26 commentaires

  1. Salut

    Ah le plaisir de la programmation… Quel bonheur de galérer pour un petit espace blanc en trop! :)

    à+

    Répondre
    • Les programmeurs sont des incompris 😉

      Répondre
  2. J’ai souri quand j’ai vu le titre de ton article dans mon flux rss. Ça m’a rappelé un mauvais souvenir et surtout une très grosse frayeur. Au moment où j’ai eu cette erreur, j’ai eu du mal à trouver la raison et donc la solution. Je trouve donc vraiment appréciable que tu ais pris le temps de décortiquer le pourquoi du comment, en des termes vraiment accessibles, avec des explications claires même pour un novice. C’est ce que j’apprécie sur ton blog.

    Répondre
    • « décortiquer le pourquoi du comment, en des termes vraiment accessibles » : c’est le défi que je m’étais lancé avec ce blog.
      Donc merci Carole pour ton commentaire qui me fait vraiment très plaisir et qui motive!

      Répondre
  3. Bonjour Marie-Ève,

    C’est c’à la programmation!

    Une virgule en moins, l’envoie d’un espace blanc en plus et voilà que soudainement toute la programmation est dérangée.

    Pour éviter l’erreur, c’est de suivre les judicieux conseils de Marie-Ève mentionnés dans cet article…

    Réal

    Répondre
  4. En voyant le titre de ce post dans ta liste de tes derniers articles, j’ai cru que tu avais également ce souci!!
    Ah je vois que les problèmes de certains (ou certaines!) t’ont amené à publier cet article, et c’est tant mieux car ça peut paraître très complexe pour des novices qui seraient dans mon cas.

    Au passage encore merci d’avoir pris la peine et le temps de voir le problème que j’avais.

    J’espère que j’aurais l’occasion de te rendre la monnaie de ta pièce…!!!

    Répondre
    • Salut Léa,
      En effet, c’est la mésaventure d’une lectrice qui m’a inspiré cet article. Ceci dit, je te rassure, ça m’est arrivée bien des fois et ça m’arrive encore (quand je développe).

      Je pense que tu auras l’occasion de m’aider, je suis une bille en markéting et en réseaux sociaux… en plus twitter est un concept qui m’intéresse, et tu as tant à m’apprendre!

      Répondre
  5. où tout simplement le fichier wp-config.php n’est pas enregistré sous l’encodage UTF-8 sans BOM que l’on peut faire avec l’éditeur de texte NotePad++
    on a ce genre de message qui bloque pour aller dans le tableau de bord si le fichier n’est pas dans le bon encodage.

    Répondre
    • Oui tu as bien raison. Je n’en ai pas parlé car c’est un peu plus complexe: en fait, l’erreur est aussi la conséquence d’une sortie dans le code php. Sauf qu’au lieu que ce soit un espace blanc, il s’agit d’un BOM, c’est à dire un caractère spécial, qui n’est pas censé être vu quand l’encodage est correctement interprété.

      C’est clairement la cause la plus difficile à trouver puisqu’on ne voit pas d’espace dans le code serveur, mais seulement dans le code source du navigateur (ou typiquement: dans le flux RSS)..

      Merci d’avoir abordé le sujet. L’article est plus complet comme ça.

      Répondre
    • La remarque de Britan ma aidé à résoudre mon problème, car je n’avais aucun espace blanc…

      IL n’y avait juste pas d’encodage de spécifiés dans mes fichiers .php, j’ai donc mis UT8 (SANS BOM) pour tous et tout marche niquel. Merci !

      Répondre
  6. Bonjour, y aurait-il une configuration serveur pour ne pas considérer ces espaces blancs ?? Car j’ai tout simplement changer de serveur web, et tout à coup j’ai ces erreurs qui apparaissent… Sans rien avoir touché au code…

    Merci de votre aide :)

    Répondre
    • Bonjour Pascal,

      En effet, cela peut venir d’une configuration de votre serveur: un passage de ANSI à UTF8 par exemple. Dans ce cas, convertissez vos fichiers en « UTF-8 sans BOM » et cela devrait résoudre le problème.

      Si ça ne marchait pas, je vous invite à contacter le support de votre hébergeur, ils ont sûrement l’habitude de ce type d’erreur.

      Amicalement,

      Répondre
      • Bonjour MarieEve

        Merci beaucoup pour cet article, étant novice en PHP j’ai dû longtemps chercher des espaces avant et après les balises PHP ! En enregistrant le fichier en mode UTF-8 sans BOM cela a résolu la moitié de mon problème. En effet mon test isset($_POST[‘submit’]) retourne toujours une valeur false. Bon ceci dit ce n’est plus gênant car j’ai pour l’instant désactiver le test. Si quelqu’un à une solution je suis preneur.

        Cela fait chaud au cœur de savoir que je ne suis plus seul devant un problème.

        Merci pour tout.

      • sans montrer de code… c’est dur de vous guider…
        les raisons peuvent etre si multiples :)

        Par contre, tant qu’ont y est…
        pour tester une valeur de variable $_POST, $_GET ou autre,
        il est « preferable » d’utiliser un test sur « empty » au lieu de « isset » !

        Pourquoi ?
        if (isset($POST[‘var’])
        va dire si oui ou non la variable existe ! c’est tout

        alors que:
        if (!empty($POST[‘var’]) (noter le  » ! « )
        Va dire :
        1/ si oui ou non la variable existe
        2/ si oui ou non elle a une valeur d’attribué

        1 test, 2 infos… c’est mieux non ?
        car la plupart du temps savoir qu’une variable existe n’apporte rien si elle n’a pas de valeur…

      • Un grand merci Thierry pour ton implication. Tes explications sont claires et appréciées :)

        Bon dimanche!

      • Merci Thierry,
        Cela roule pour moi maintenant. J’avais mal orthographié la variable!
        Super l’explication sur « empty »

        A bientôt

  7. bonjour je n’arrive pas a me connecté via filezilla, je suis très débutante, et le message d’erreur m’indique « Erreur : Erreur critique
    Erreur : Impossible d’établir une connexion au serveur » apparement le code n’est pas bon, mais j’ai mis mes code wordpress, je ne comprend pas tout, ce n’est pas moi qui a mis en place le blog sur wordpress, pouvez vous m’aider?

    Répondre
    • Bonsoir,
      Les codes pour se connecter à l’administration de WordPress ne sont pas les mêmes que pour Filezilla. Cherchez dans le mail reçu après achat de votre hébergement, vos identifiant/mot de passe FTP.

      Vous avez 3 renseignements à donner : le host ou serveur, le login et le mot de passe. Ces 3 infos sont dans le mail, au même endroit. Cherchez bien et bon courage!

      Répondre
  8. Salut à tous, j’ai beau avoir lu cet article, je ne trouve pas où ce satané « espace blanc/ Saut de ligne » peut se situer…

    Je bidouille à partir d’un DVD d’Elephorm sur le PHP/MySQL (assez bien fait par ailleurs) et le but de l’exercice en cours est de vérifier que le « code » envoyé dans un formulaire et bien à une certaine valeur et dans ce cas, on redirige vers une page existante,

    Si j’entre tout sauf la valeur attendue, tout fonctionne, dès que j’entre la valeur attendue, je récupère la maudite erreur !

    Voilà mon bout de code php :

    Le formulaire (inclus dans la même page) :

    Code :

    Je sèche…

    Une idée ?
    Merci d’avance :-)

    Répondre
    • Ah… le code n’est pas affiché :-(

      Y’a une balise à rajouter pour que ça passe ou bien ?

      Répondre
      • Oui la balise « pre ». 😉

        Mais je n’ai pas besoin du code, l’espace blanc n’est pas forcément visible. Si vous avez enlevé tout espace « visible » dans le fichier (en dehors des balises php), alors je pense que le problème vient de l’encodage. Le fichier est sûrement encodé en UTF-8. Convertissez-le en « UTF-8 sans BOM » avec notepad++ et tout devrait revenir dans l’ordre.

  9. C’est pour éviter ce problème qu’il est préférable de ne pas mettre la balise fermante ?> à la fin d’un fichier PHP.

    Répondre
  10. Votre billet m’a aidé.
    Je ne savais pas où chercher les blancs du header.
    Ma petite pierre à l’édifice..
    Les blancs effacés, un autre type d’erreur est intervenu.
    Hébergeur OVH mutualisé.
    L’erreur était « erreur interne serveur ».
    En l’occurence, le serveur refusait le mode écriture dans un fichier .txt
    Même en droits 777
    J’ai finalement regroupé le script .php et le ficheir .txt dans le même répertoire .
    Cela évite de devoir franchir la barrière d’accès en écriture d’une chaine de sous-répertoires.
    Encore merci

    Répondre
  11. Bonjour,
    après avoir lu votre billet et ratissé la toile pour trouver une solution, je suis toujours bloqué…
    Mon problème : j’ai ce message lorsque je veux partager mes 2 derniers articles récent via facebook, ( Cannot modify header information – headers already sent by (output started at /homez.332/classrnb/www/index.php:2) in /homez.332/classrnb/www/wp-includes/pluggable.php on line 876 ) .Dans tous mes anciens articles le partage via facebook fonctionnent parfaitement… De plus le thème mentionner dans le message d’erreur n’est pas le thème utilisé…. HELP ME PLEASE

    Répondre
    • Bonjour,

      Votre erreur n’est pas lié à votre thème mais au fichier index.php et pluggable.php. Pas de bol, ce sont les fichiers qui relèvent le bug habituellement mais ce n’est pas là où est situé le bug.

      Avez-vous mis en place les conseils de l’article. L’erreur est toujours là quand vous renommez le dossier plugins en FTP ?

      Si oui, mettez à jour WordPress (par FTP), si ça ne marche pas, changez de thème. Avec tout ça, vous devriez avoir trouvé par élimination d’où vient le problème (plugin, wordpress ou le thème).

      Bon courage !

      Répondre
  12. Bonjour Marie-Eve,

    Depuis que j’ai changé mon thème, j’ai ce message qui apparait au-dessus de ma fenêtre de log-in : An error occurred querying the database, try again or verify database settings.
    Warning: Cannot modify header information – headers already sent by (output started at /homez.743/devoyage/www/wp-includes/l10n.php:142) in /homez.743/devoyage/www/wp-login.php on line 384

    Impossible de me logger pour éventuellement supprimer ce petit espace blanc, et j’ai encore du mal avec le web ; je ne comprends pas le FTP. Devais-je avoir FieZilla avant ce bug ?

    Merci d’avance pour votre aide,

    Camille

    Répondre

Trackbacks/Pingbacks

  1. Le monde merveilleux du bloging - Les Doigts dans le Net - [...] résoudre un bug [...]

Soumettre un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

This Blog will give regular Commentators DoFollow Status. Implemented from IT Blögg

EmailEmail
PrintPrint