【PHP】エラー「Warning: Cannot modify header information」の対処法

PHPで「Warning: Cannot modify header information」エラーが発生すると、プログラムの実行が止まってしまうことがあります。このエラーは特定の状況でよく発生するため、対処方法を知っておくことが重要です。この記事では、このエラーの原因と具体的な解決方法について詳しく解説します。

「Warning: Cannot modify header information」エラーとは?

このエラーは、PHPがヘッダー情報を送信しようとしたときに、既に出力が行われている場合に発生します。ヘッダー情報はHTTPレスポンスの一部であり、レスポンスの本文が送信される前に送信する必要があります。

エラーが発生する原因

HTMLや空白の出力が先行している場合

ヘッダー情報を送信する前に、HTMLの出力や空白(スペースや改行など)が含まれているとエラーが発生します。

インクルードファイルに出力がある場合

include や require で読み込んだファイルに出力が含まれていると、ヘッダー情報を変更できなくなります。

エラーの解決方法

出力バッファリングを使用する

出力バッファリングを有効にすることで、スクリプトの出力を一時的にメモリに保存し、後で一括して出力することができます。

ob_start();
// ここにヘッダー情報の設定を行う
header('Location: http://example.com');
// ここにその他の処理を行う
ob_end_flush();

ヘッダー情報の送信前に出力が行われていないことを確認する

PHPコードの最上部でヘッダー情報を設定するようにし、ヘッダー情報を設定する前に何も出力しないようにします。

<?php
header('Location: http://example.com');
exit;
?>

ファイルの先頭やインクルードファイルに不要な出力がないか確認する

スクリプトやインクルードファイルの先頭に空白や改行がないことを確認します。

// ファイルの先頭に空白や改行がないことを確認
<?php
// ここにヘッダー情報の設定を行う
header('Location: http://example.com');
exit;
?>

BOM (Byte Order Mark) を削除する

ファイルにBOMが含まれていると、出力が発生してしまいます。BOMを削除するか、BOMなしで保存します。

  • エディタの設定でBOMなしでファイルを保存する。
  • Notepad++ などのエディタを使用してBOMを削除する。

デバッグ情報を確認する

エラーの具体的な箇所を特定するために、PHPのエラーログを確認します。php.ini で error_log を設定しておくと便利です。

error_log = /path/to/php-error.log

エラーログを確認して、どの行で出力が発生しているかを確認し、その行を修正します。

まとめ

「Warning: Cannot modify header information」エラーは、ヘッダー情報を送信する前に出力が発生している場合に起こります。この記事で紹介した方法を試して、エラーを解消してください。エラーログの確認も重要ですので、問題の根本原因を突き止めるために活用しましょう。