PHP警告: ヘッダー情報を変更できません
English version: PHP Warning: Cannot modify header information
PHP警告: ヘッダー情報を変更できません – ヘッダーは既に送信されています…
サーバーのエラーログにこのメッセージが表示されたり、ウェブページに表示されたりすることがあります。これは厄介で、メッセージに記載されているPHPスクリプトに問題があるように見えます。しかし実際には、このメッセージは別のスクリプト、プラグイン、またはテーマに問題がある(バグがある)ことを示しています。バグのあるプラグインを使用し、 PHPエラーの表示が有効になっている場合(通常は有効にすべきではありません)、このメッセージが表示されることがあります。
このメッセージは、ウェブサイト上のPHPコードが何らかの出力を生成した際に表示されます。通常、これはPHPの警告メッセージであり、ユーザーのブラウザには表示されるべきではありません。この出力は、ウェブページのヘッダーが生成されてユーザーのブラウザに送信される前に送信されます。ウェブページのヘッダーは空の場合もあれば、Cookieなどの追加情報を扱う場合もあります。
ヘッダーが空であるか否かにかかわらず、ページコンテンツよりも前に送信されなければなりません。
バグのある WordPress プラグインが、他のプラグインがブラウザにヘッダーを送信する前に PHP 警告を生成すると、 「PHP Warning: Cannot modify header information – headers already sent in …」というメッセージとともにサーバーエラーが発生します。
このようなメッセージは、どのスクリプトやプラグインがエラーの原因となったのかを示さないため、誰をも誤解させる可能性があります。Webサーバーは、ヘッダーが送信されていないプラグインによって生成された出力を検出すると、自動的にヘッダーを作成してブラウザに送信します。そのため、このような動作を想定していない他のプラグインは、必要な場合にヘッダーを送信できなくなります。
WP Cerber Securityを使用している状況で、この問題を解決する方法
- ホスティングコントロールパネルのPHP設定でエラー表示を無効にしてください。PHP設定にアクセスできない場合は、ホスティングプロバイダーにお問い合わせください。
- WP Cerberの設定画面の「セキュリティ強化」管理ページで、PHPエラーの表示を無効にします。
- WP Cerberのメイン設定で、「セキュリティエンジンの読み込み」を「標準モード」または「詳細モード」に設定してください。
- wp-config.php ファイルでWP_DEBUG定数が定義されているかどうかを確認してください。二重スラッシュ//で囲まれた行をコメントアウトするか、行全体を削除してください。以下のように表示されるはずです。
// define( 'WP_DEBUG', true );
// define( 'WP_DEBUG', 1 ); - wp-config.php ファイルの先頭に以下の行を追加してください。
@ini_set( 'display_errors', 0 );
@ini_set( 'log_errors', 1 );
WP CerberまたはWordPressが問題の原因となっている可能性はありますか?
いいえ。この問題を引き起こす可能性のあるコードは、古い/バグのあるプラグインか、アクティブなテーマのいずれかです。根本原因を特定するには、サーバーのエラーログを確認してください。また、古いプラグインは削除してください。