web-dev-qa-db-ja.com

警告:ヘッダー情報を変更できません-ヘッダーはすでに送信されています

私のログはこのメッセージで乱雑です:

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).

これは、誰かが次のような存在しないコメントへのアドレスを入力したときにのみ発生します。

http://example.com/comment/874

コメントが存在する場合、またはその他のアドレスの場合、エラーは発生しません。 (私は最近たくさんのスパムコメントを削除していました、そしてボットは彼ら自身のコメントを読むために戻って来ます、それが多くの見つからないコメントがある理由です)

このエラーを取り除く方法はありますか?私が持っている唯一のコメントモジュールはコメントの良さであり、問​​題キューのそのようなエラーについての不満はないので、多分それは何か別のものです。私はすべてのカスタムモジュールファイルをチェックしました。それぞれのファイルは<?phpで始まり、このタグの前にスペースも何もなく、終了タグもありません。他に何をチェックすればいいのか分かりません。

5
camcam

私自身の場合、これはMENU_NOT_FOUND定数を返すのではなく、誤って drupal_not_found() を呼び出して404を返そうとするモジュールが原因であることがわかりました。これにより、drupal_deliver_page()が単一のページ要求で2回呼び出されます。

現在、ビューが最大の原因です。それを解決するパッチについては https://drupal.org/node/1414068 (コメント#16)を参照してください。この問題がある他のモジュールを見つけるには、「drupal_not_found」のモジュールディレクトリをgrepする必要があります。

6
Les Lim

これを引き起こすいくつかのことがわかりました。

その後にスペースがあるファイルの終了_?>_。 Drupal規則は、PHp終了タグをファイルに使用しないことです。

BOMを含むUTF-8エンコードファイル。 BOMはオープニング_<?php_の前にあり、出力されます。

Yahoo!のアドバイスに従ってYSlowおよびhtml.tpl.phpの_</head>_と_<body>_の間にflush()を追加する

コードでdsm()の代わりにprintまたは_print_r_を使用して直接デバッグします。

また、テンプレートファイルにフレームバスティングコードがあるという奇妙な問題を思い出しました。リンクされたリソースが404edの場合、この問題が発生したと思いますDrupal 404ページはリンクされたリソースの負荷。

3
mpdonadio

Les Limの回答に加えて、コメントURLでこれを表示しているという結果と組み合わせて、おそらくコメントGoodnessモジュールからの問題 #2218501 を表示しています(サイトでそれを使用していますか?)。コメントURLの独自のコールバックを挿入しており、コメントが見つからない場合は実際に drupal_not_found() を呼び出しています(MENU_NOT_FOUNDを再調整する必要がある場合)。

問題にはパッチがあり、それは2014年10月にモジュールの開発ブランチにコミットされました。プロジェクトのステータスと問題のキューから見ると、更新された公式リリースは期待できません。しかし、すぐに。

0
Eelke Blok