【解決】 WordPress: Cannot modify header information の解決方法と原因 | WordPress/PHP トラブルシューティング

WordPressサイトを運営している際に「Cannot modify header information – headers already sent by …」というエラーメッセージに遭遇しましたか?ご安心ください、これはWordPressユーザーによくある問題で、多くの場合、比較的簡単な手順で解決できます。

このエラーは、あなたのWebサイトが機能しなくなる原因となり、訪問者にアクセスできない状態を示してしまいます。しかし、この記事を読めば、その原因を理解し、迅速に解決するための具体的な手順を知ることができます。Windowsユーザーの方向けに、PowerShellやCmdのヒントも交えながら解説していきます。

1. WordPress: Cannot modify header information とは?(概要と緊急度)

このエラーは、WordPressがHTTPヘッダー情報をWebブラウザに送信しようとした際に、既に何らかのコンテンツ(例:空白文字、HTMLタグ、エラーメッセージなど)が出力されてしまっている場合に発生します。

PHPの仕様上、HTTPヘッダーは、Webサーバーがブラウザに対してページ内容(コンテンツ)を送信する前に、必ず先に送信されなければなりません。もし、ヘッダーが送られる前に少しでも出力があった場合、PHPはこのエラーを発生させ、ページの表示を停止します。

緊急度: 非常に高いです。このエラーが発生すると、サイト全体または特定の部分が正しく表示されなくなり、訪問者はサイトにアクセスできなくなります。早急な対応が必要です。

2. 【最速】今すぐ試すべき解決策

解決策1:不要な空白・改行・BOMの除去

「Cannot modify header information」エラーの最も一般的な原因は、PHPファイルの先頭や末尾、あるいは<?phpタグの直前にある目に見えない不要な文字(空白、タブ、改行コード)や、BOM(Byte Order Mark)と呼ばれる特殊な文字です。これらを除去することで、即座に解決する可能性が非常に高いです。特にwp-config.phpfunctions.php、または最近編集したばかりのプラグインやテーマのファイルが原因であることが多いです。

具体的な手順(Windowsユーザー向け):

  1. 問題のファイルを特定する

    エラーメッセージにファイルパス(例: .../wp-content/themes/your-theme/functions.php on line 1)が記載されている場合は、そのファイルを特定します。もし記載されていない場合は、最近変更したファイルや、主要な設定ファイル(wp-config.php、現在使用しているテーマのfunctions.php)から確認を始めましょう。

    PowerShellでのファイル内容確認ヒント:

    エラーメッセージにファイルパスが記載されている場合、そのファイルの先頭部分をPowerShellで確認することで、目に見えない文字がないかの手がかりになることがあります。

    # 例: wp-config.php の先頭5行を表示
    # "C:\path\to\your\wordpress\" の部分は、実際のWordPressのインストールパスに置き換えてください。
    Get-Content "C:\path\to\your\wordpress\wp-config.php" -TotalCount 5
    
    # エラーが出ている特定のファイルを確認する場合
    # 例: functions.php の先頭5行を表示
    Get-Content "C:\path\to\your\wordpress\wp-content\themes\your-theme\functions.php" -TotalCount 5
    
  2. ファイルをダウンロードする

    FTPクライアント(例: FileZilla)を使用して、Webサーバーから特定したPHPファイルをあなたのPCにダウンロードします。

  3. 安全なテキストエディタで編集する

    Windows標準のメモ帳ではなく、Visual Studio CodeNotepad++サクラエディタなど、BOMなしUTF-8形式で保存できる高機能なテキストエディタでファイルを開きます。

  4. 不要な文字を除去する
    • ファイルの先頭にある<?phpタグより前の空白文字、タブ、改行コードをすべて削除します。カーソルを先頭に置いてバックスペースキーを何度か押してみるのが効果的です。
    • ファイルの末尾にある?>タグの後の空白文字、タブ、改行コードをすべて削除します。可能であれば、ファイルの末尾が?>で終わるPHPファイルでは、この?>タグ自体を省略することをおすすめします(後述の「恒久的な再発防止策」を参照)。
    • テキストエディタの設定で、ファイルを「BOMなしUTF-8」または「UTF-8 (no BOM)」形式で保存し直します。
  5. ファイルをアップロードする

    編集したファイルをFTPクライアントでWebサーバーにアップロードし直し、元のファイルを上書きします。

  6. キャッシュをクリアして確認する

    ブラウザのキャッシュをクリアし(Ctrl+F5またはShift+F5)、サイトを再読み込みしてエラーが解消されたか確認します。

3. WordPress: Cannot modify header information が発生する主要な原因(複数)

上記の解決策で直らない場合や、再発を防ぐために、エラーが発生する主な原因を理解しておきましょう。

  • PHPファイルの先頭・末尾の不要な空白文字や改行
    これが最も一般的な原因です。<?phpタグの前にスペースや改行があると、それがコンテンツとして出力されてしまい、その後にヘッダーを送信できなくなります。
  • BOM (Byte Order Mark) 付きのUTF-8ファイル
    一部のテキストエディタでUTF-8形式でファイルを保存する際に、ファイルの先頭にBOMと呼ばれる特殊な文字が付与されることがあります。このBOMが一部の環境でコンテンツとして解釈され、ヘッダー送信を妨げます。
  • wp-config.phpfunctions.php などの編集ミス
    WordPressの根幹をなすこれらの重要なファイルで、誤って不要な文字を追加したり、コードを記述する際に間違いがあったりすると、サイト全体に影響を及ぼしやすくなります。
  • プラグインやテーマの競合・不良
    品質が低い、または他のプラグイン/テーマと競合するプラグインやテーマが、ヘッダー送信前に意図しない出力をすることがあります。最近追加・更新したプラグインやテーマがある場合は、一時的に無効化して確認することも有効です。
  • PHPのエラー報告 (Error Reporting)
    PHPのエラーメッセージ自体がヘッダー送信前に出力されてしまうケースです。これは特に開発環境で発生しやすいですが、本番環境でも設定によっては起こり得ます。デバッグモードを適切に設定することで、ユーザーにエラーが表示されるのを防ぎつつ、エラーログで問題を特定できます。

4. WordPress/PHPで恒久的に再発を防ぐには

一度解決しても再発する可能性を低くするために、以下の対策を習慣化することをおすすめします。

  • BOMなしUTF-8での保存を徹底する
    PHPファイルやWordPressのテンプレートファイルを編集する際は、必ずBOMなしUTF-8で保存できる高機能テキストエディタ(Visual Studio Code, Sublime Text, Notepad++, サクラエディタなど)を使用し、保存時には必ず「BOMなしUTF-8」を選択する癖をつけましょう。
  • PHPファイルの末尾の?>タグを省略する
    PHPのみを含むファイルの末尾が?>で終わる場合、その後に意図しない空白文字や改行が入ってしまうリスクがあります。PHPの公式ドキュメントでも、PHPのみのファイルでは最後の?>タグを省略することが推奨されています。これにより、ファイル末尾の不要な出力を物理的に防ぐことができます。
  • 安全なテキストエディタのみを使用する
    Windows標準のメモ帳などのシンプルなエディタは、BOM付きUTF-8で保存してしまうことがあるため、WordPressやPHPファイルの編集には避けるべきです。
  • 新規プラグイン/テーマ導入時の注意
    新しいプラグインやテーマを導入する際は、必ず事前にサイト全体のバックアップを取り、もし可能であればステージング環境(本番と同じテスト環境)で動作確認を行ってから本番環境に適用しましょう。また、一時的に他のプラグインを停止して競合がないか確認しながら導入することも有効です。
  • 開発環境でのデバッグ設定
    WordPressのwp-config.phpファイルでWP_DEBUGtrueに設定し、開発環境でエラーを徹底的に潰しましょう。本番環境では、WP_DEBUGfalseに戻し、エラーログにエラーが出力されるように設定することで、ユーザーにエラーが表示されることを防ぎつつ、問題の追跡を可能にします。

    // wp-config.php ファイルに以下を追加 (または既存の行を修正)
    define( 'WP_DEBUG', true ); // 開発環境では true、本番環境では false
    define( 'WP_DEBUG_LOG', true ); // エラーを wp-content/debug.log に出力
    define( 'WP_DEBUG_DISPLAY', false ); // エラーを画面に表示しない(本番環境向け)
    @ini_set( 'display_errors', 0 ); // PHPのエラーを画面に表示しない
    

これらの手順と対策を行うことで、「Cannot modify header information」エラーを迅速に解決し、再発のリスクを大幅に減らすことができるでしょう。落ち着いて一つずつ確認してみてください。