web-dev-qa-db-fra.com

Avertissement: impossible de modifier les informations d'en-tête - en-têtes déjà envoyés

Mon journal est encombré de ce message:

Warning: Cannot modify header information - headers already sent by (output started at /home/path/to/drupal/7/includes/common.inc:2681) in drupal_send_headers() (line 1216 of /home/path/to/drupal/7/includes/bootstrap.inc).

Cela se produit uniquement lorsque quelqu'un tape l'adresse d'un commentaire inexistant comme celui-ci:

http://example.com/comment/874

Si le commentaire existe, ou pour toute autre adresse, il n'y a pas d'erreur. (Je supprimais beaucoup de commentaires de spam récemment et les bots reviennent pour lire leurs propres commentaires, c'est pourquoi il y a beaucoup de commentaires introuvables.)

Existe-t-il un moyen de se débarrasser de cette erreur? Le seul module de commentaire que j'ai est la qualité des commentaires et il n'y a pas de plainte sur une telle erreur dans la file d'attente des problèmes, alors c'est peut-être autre chose. J'ai vérifié tous mes fichiers de modules personnalisés et chacun d'eux commence par <?php et il n'y a pas d'espace ou quoi que ce soit avant cette balise, et il n'y a pas de balise de fermeture. Je ne sais pas quoi vérifier d'autre.

5
camcam

Dans mon propre cas, j'ai constaté que cela était dû à des modules qui tentent de renvoyer un 404 en appelant par erreur drupal_not_found () au lieu de renvoyer la constante MENU_NOT_FOUND. Cela provoque l'appel de drupal_deliver_page () deux fois dans une seule demande de page.

Vues est le plus grand coupable en ce moment; voir https://drupal.org/node/1414068 (commentaire # 16) pour un correctif qui le résout. Vous devez parcourir votre répertoire de modules pour "drupal_not_found" pour trouver d'autres modules avec ce problème.

6
Les Lim

J'ai vu plusieurs choses provoquer cela.

Une fermeture ?> Sur un fichier avec un espace après. La convention Drupal consiste à ne pas utiliser la balise PHp de fermeture sur aucun fichier.

Un fichier codé UTF-8 avec une nomenclature. La nomenclature serait avant l'ouverture <?php, Et est sortie.

Suivant les conseils de Yahoo! YSlow et en ajoutant une flush() entre </head> Et <body> Dans html.tpl.php

Déboguez directement en utilisant print ou print_r Au lieu de dsm() dans le code.

Je me souviens également d'un problème étrange que j'avais eu où j'avais du code Framebusting dans un fichier de modèle, et si une ressource liée 404ed, alors je pense que j'avais ce problème b/c la Drupal 404 page serait charge pour la ressource liée.

3
mpdonadio

En s'appuyant sur la réponse de Les Lim, combinée à votre constat que vous voyez cela avec des URL de commentaire, vous voyez probablement le problème # 2218501 du module Comment Goodness (utilisez-vous cela sur votre site?). Il insère son propre rappel pour les URL de commentaires et appelle en effet drupal_not_found () quand il ne peut pas trouver le commentaire (où il devrait être en train de réaccorder MENU_NOT_FOUND).

Il y a un correctif dans le problème, et il a été validé pour la branche de développement du module, en octobre 2014. D'après l'état du projet et la file d'attente des problèmes, il ne semble pas que nous pouvons nous attendre à une version officielle mise à jour. bientôt, cependant.

0
Eelke Blok