【PHP】Warning: Cannot modify header information - headers already sent byの話
「Warning: Cannot modify header information - headers already sent by」というエラーの対処について
このエラーがでる原因としては、header()関数の前に、何かを出力してしまっていることが挙げられます。
覚えておいて頂きたいのは、header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。 頻出するエラーとして、include() または require() 関数、他のファイルをアクセスする関数に 空白または空行があり、header() の前に出力が 行われてしまうというものがあります。同じ問題は、単一の PHP/HTML ファイルを使用している場合でも存在します。
PHP: header - Manual
例えば、
<?php echo “hogehoge”://heder()関数の前に出力しているのでエラーになります header('Location:http://hoge.com'); exit; ?>
また、下記のようにURLに値がなかったら他のページに飛ばして、値があったらHTMLを出力するというプログラムですが、
<html> <?php if($_REQUEST['hoge'] === ""): header('Location:http://hoge.com'); exit; else: ?> <!—HTMLを出力---> <?php endif; ?> </html>
というのでもエラーになります。
※htmlタグの前にheder()関数を書けばエラーになりません。
自分がやってしまったのが、
<?php if(empty($error)){ $_SESSION = $_POST; var_dump($_SESSION);//header()関数の前に出力されているためエラー header('Location:http://hoge.com'); exit; } ?>
SESSION変数に渡された内容をチェックしていて、後からheader()関数を書いて消し忘れてしまって、エラーが出続けてしまったというものですね。
まだまだ、修行が必要ですが頑張っていきます。
ご一読頂きまして、ありがとうございました。