【PHPエラー】Warning: Cannot modify header informationの解決方法
プログラミングの世界では、予期せぬエラーに直面することはよくあることです。特にPHPを使用している場合、スクリプトを実行した際に「Warning: Cannot modify header information」というエラーメッセージが表示されることがあります。このメッセージは、コードのどこかで問題が発生している重要な手掛かりとなります。
このブログ記事では、このエラーの意味と、それがなぜ発生するのか、そしてどのように解決すればよいのかを詳しく解説していきます。
この記事の目次を表示
Warning: Cannot modify header informationとは
このエラーメッセージは、表示される理由は複数ありますが今回は一番考えられる方法とその解決策を解説していきたいと思います。
Warning: Cannot modify header information - headers already sent by (output started at ▲▲) in ▲▲ on line ■■
▲▲:ディレクトリ名/ファイル名
■■:エラーの原因となる改行や要素が書かれている行数
このような形式でエラー表示がされます。このエラーは以下のような内容になっています。
■■というファイル内にある▲▲行目に書かれている内容が原因でheader関数が正しく動作しない。
エラーが表示される原因と解決方法
header関数の前に出力や改行がある
header関数を使用してこのようなエラーが表示された場合、header関数の前に改行があったり、要素が出力されていないか確認してみましょう。
大抵の場合、header関数より前に改行やテキストなどが出力されていてるはずです。
header関数はそれよりも前に何も出力してはいけないというルールがあります。そのためheader関数よりも前に改行やテキストなどが出力されているとこのようなエラーが表示されます。
header関数の前に改行がある場合
<?php
header('Location: http://www.example.com/');
exit();
?>
header関数の前に出力がある場合
<?php
echo "テキストを出力します";
header('Location: http://www.example.com/');
exit();
?>
解決方法
<?php
header('Location: http://www.example.com/');
exit();
echo "テキストを出力します";
?>
header関数を使用する場合、正しい記述順は上のようになります。このように書くことでエラーが表示されることなく、正しくリダイレクトされます。
ただし、header関数は他のページや外部URLにリダイレクトさせる機能になるため、それよりも下に書かれている内容が表示されることはありません。
その他の原因
大半は先ほど解説したことが原因で解決することがほとんどです。しかし中にはheader関数より前に何も出力されないのにエラーが表示されるということもあります。
そのようなときはphp.iniの設定を確認してみましょう。
php.iniの設定の中の「output_buffering」、この設定がOFFになっている場合、この設定を「ON」にすることでheader関数のエラーを解消することが出来ます。
ただし、php.ini、このファイルを扱えるサーバー、扱えないサーバーがあるので注意が必要です。
まとめ
header関数を使用する場合、それよりも前に出力があってはいけません。header関数のルールはこれだけです。
たったこれだけのルールを守るだけで、URLを指定して、リダイレクトさせることが出来ます。
ログインした後にマイページへリダイレクトさせたい、現在非公開だからアクセスされたくない等、使用用途は多岐にわたります。
関数のルールを守り、バグのないプログラムを作成していきたいですね。