コンテンツにスキップ

WordPress の警告の対処法「 Cannot modify header information – headers already sent 」

メインイメージ

WordPress サイトにおける「 Cannot modify header information – headers already sent by …… 」という警告の意味と対処法を説明します。

出力サンプル:

WordPress 警告: Cannot modify header information

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/wp-config.php:1) in /var/www/html/wp-admin/includes/misc.php on line 1438

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/wp-config.php:1) in /var/www/html/wp-includes/functions.php on line 7108

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/wp-config.php:1) in /var/www/html/wp-admin/admin-header.php on line 9

意味

この警告は HTTP レスポンスのヘッダーの送信がすでに完了した後にヘッダーの追加や変更が試みられていることを意味します。

WordPressはブラウザから HTTP リクエストを受け取ると、レスポンスとして「ヘッダー」と「ボディ」を返します。 このヘッダーは必ずボディよりも前に送信される必要があり、一度ボディの送信が始まってしまうと、ヘッダーの追加や変更はできません。

原因

この警告が発生する主な原因は、 WordPress のリクエスト処理の中で header() が呼び出される前にボディ出力が始まってしまっていることにあります。

WordPress ではリクエスト処理中に何らかの出力がされるとそれが HTTP ボディとしてクライアントに送信される仕組みになっています。 そのため、例えば次のようなことを header() 呼び出し前に行うとこの警告が表示されます。

  • a) printecho を使う
  • b) PHP タグの記述ミスで改行やスペースを出力する

Note

PHP の設定で output_bufferingon に設定されている場合、上記 a) b) を行っていても Cannot modify header information の警告が出ないことがあります。 この output_buffering の設定を変更できるかどうかはホスティングサーバーによって異なります。

対処法

この警告の対処法は上述の原因を取り除くことです。 つまり、 header() 呼び出し前に PHP での出力を行っているところを修正することです。

printecho を意図して使っていないのに警告が出る場合、 b) の PHP タグの記述ミスを疑ってください。 例えば、次のように wp-config.php の末尾に閉じタグ ?> があり、その後に改行やスペースがあると問題になります。

wp-config.php:

<?php

// ...

/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';

?>

エディタや IDE の自動補完機能が意図せず閉じタグや空行を挿入することもあり、 Git などでコード管理をしていないと発見が非常に難しくなることもあります。

稀にプラグインのバグが原因の場合もあります。 何もしていないのにある日突然この警告が出るようになった場合は使用しているプラグインのバグを疑うとよいかもしれません。

確認時のバージョン

  • WordPress 6.6.2