WordPressエラーの多くは、何が原因で問題が生じているかを説明するメッセージも表示します。今回取り上げる「Warning: Cannot modify header information – headers already sent by」(警告:ヘッダー情報を変更することができません─ヘッダーはすでに送信されています)というエラーメッセージは、PHPファイルのコードに問題があり実行ができないことを示しています。

「Cannot modify header information」エラーの原因はいくつか考えられますが、このエラーは問題のあるファイル、さらには具体的なコード行まで特定してくれるため、すぐにトラブルシューティングを行うことができます。

今回はこのエラーが発生する原因と2つの解決策をご紹介します。

「Cannot modify header information」エラーの原因

冒頭で述べた通り、「Cannot modify header information」エラーは、サイトの.phpファイルが実行できない場合に発生します。WordPressは、wp-config.phpfunctions.phpなどの.phpファイルに依存しています。

サイトが読み込む必要のある.phpファイルのいずれかに問題があると、以下ようなエラーメッセージが表示されます。

Warning: Cannot modify header information - headers already sent by (output started at /home/public_html/wp-config.php:#) in /home/public_html/wp-includes/file-example.php on line 33

このエラーについては、幸いトラブルシューティングに役立つ詳細情報を提供してくれます。上の例では、2つのファイル名が挙げられており、1つ目のファイルに問題があり、2つ目のファイルの実行を妨げていることがわかります。

また、エラーメッセージの最後にある「line XX」(上の例では「line 33」)は、問題のあるコード行を示しています。

PHPコードの問題は、基本的には簡単に修正することができます。このエラーの原因には、以下のようなものが挙げられます。

  • <?phpの前、または?>の後に空白がある
  • PHP header関数の前のHTMLブロック
  • PHP header関数の前に追加されているprintまたはecho
  • プラグインのコードに問題がある

この手のエラーを修正するには、PHPコードの修正が必要になります。独自にコードを追加する必要はありませんが、コーディングの知識がなく操作に不安がある場合は、開発者の手を借りることをお勧めします(特に空白文字やPHPのheader関数の前にある文以外が原因の場合)。

「Cannot modify header information」エラーを解決するには(2つの方法)

「Cannot modify header information」エラーには2つのトラブルシューティング方法があり、最初にご紹介する方法は、WordPress管理画面で直接実行することができます。

2つ目の方法は、FTP/SFTPを使用するもので、管理画面にアクセスできない、あるいはWordPressを使用していない場合に有用です。

1. プラグイン/テーマエディターで修正するかプラグインを置き換える

エラーメッセージ「Warning: Cannot modify header information – headers already sent by」に遭遇したら、まず最初に行うことは、問題の原因となっているファイルを開くことです。ファイルを開き、示されているコード行を確認します。

例えば、以下のようなエラーメッセージであれば、テーマのfunctions.phpファイルの中身を確認します。

Warning: Cannot modify header information - headers already sent by (output started at /home/public_html/wp-content/themes/twentytwentyone/functions.php:#) in /home/public_html/wp-includes/file-example.php on line 1

この場合は、WordPressのテーマエディターを使用して原因を突き止めることができます。

エディターを開いたら、右側のメニューからアクセスしたいファイルを選択します。

テーマの関数ファイル(functions.php)
テーマの関数ファイル(functions.php)

上のスクリーンショットには、1行目にある<?phpタグの前に空白があることがわかります。エラーメッセージは1行目に問題があることを示しているため、この空白が原因であることがわかります。

この場合は、この空白を削除し「ファイルを更新」をクリックして変更を保存するだけでOKです。サイトを再読み込みすると、エラーが解消されているはずです。

WordPressのプラグインエディター(「プラグイン」>「プラグインエディター」)を使用する場合も同様です。エラーメッセージがプラグインファイルに問題があることを示している場合は、プラグインエディターで同じ操作を行ってください。

エラーメッセージが、WordPressのプラグインディレクトリ内にあるファイルに問題があることを示している場合は、そのプラグインを削除し再インストールすると、高確率で解決します。

ただし、使用するツールによっては、そのプラグインの設定が失われる可能性があり、アドオンの再設定が必要になります。

2. FTP/SFTPで問題のあるファイルを編集する

「Cannot modify header information」エラーの原因は、WordPressのテーマまたはプラグインエディターでアクセス可能なファイルでないこともあります。あるいは、WordPress以外でサイトを構築・運営しているかもしれません。

その場合は、FTP/SFTPで問題のあるファイルにアクセスしてください。FileZillaのようなFTPまたはSFTPクライアントが必要になります。

また、サイトのFTP/SFTP認証情報も求められます。これは通常、ホスティングのコントロールパネルで確認することができます。

Kinstaをご利用の場合は、MyKinstaにログインして、「WordPressサイト」>(サイト名)>「情報」で確認可能です。

MyKinstaのSFTP認証情報
MyKinstaのSFTP認証情報

認証情報を用意したら、FTPまたはSFTPクライアントでサイトにアクセスし、ルートディレクトリを見つけてください(「root」「public_html」「public」またはサイト名)。

WordPressのルートディレクトリの中身は以下のようになっています。

WordPressのルートディレクトリ
WordPressのルートディレクトリ

「Warning: Cannot modify header information – headers already sent by」のメッセージを表示するファイルを探します。例えば、public/wp-config.phpファイルを右クリックし、「View/Edit」(表示/編集)を選択します。

wp.configファイルを開く
wp.configファイルを開く

選択すると、デフォルトのテキストエディターでファイルが開きます。ファイルを開いたら、エラーメッセージが示すコード行に移動して、エラーを見つけましょう。

エラーメッセージが示す行を見つける
エラーメッセージが示す行を見つける

エラーが見当たらない場合は、PHPファイルの扱いに慣れている開発者に相談してみてください。空白やPHPのheader関数前の文が原因であれば、自分で簡単にエラーを解消できるはずです。

作業を終えたらファイルの変更を保存し、FTP/SFTPクライアントを閉じます。サイトを再度開くと、エラーが消えているはずです。

まとめ

「Warning: Cannot modify header information – headers already sent by」エラーは、そのメッセージの長さから不安になるかもしれません。しかし、逆にメッセージ長いことで解決の手がかりを掴みやすく、トラブルシューティングは意外と簡単です。他のエラーとは異なり、どのファイルのどの行に問題があるのかを細かく知らせてくれます。

問題のあるファイルによって、以下2つの解決方法があります。

  1. プラグインまたはテーマエディターを使用してエラーを修正するか、プラグインを置き換える
  2. FTP/SFTPクライアントを使用して問題のあるファイルを編集する

原因を突き止めるのは簡単ですが、PHPの知識がない場合は解決が難しい可能性もあります。不安であれば、信頼できる開発者にトラブルシューティングを依頼することも検討してみてください。

このエラーの解決策についてご質問がありましたら、以下のコメント欄でお知らせください。

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.