良く目にするエラー。
エラーの内容は読んで字の如くヘッダを編集しようとしたけど既にヘッダが送信されてるよってこと。
対処法その1
header関数やsession_startの前に改行やタブやスペースやHTMLなどをつけていないか。
特に?>の後に改行を入れている場合ハマる。例えば、
<?phpはエラーになる。太字の?>で改行を出力しているから。
require_once("hogehoge.php");
?>
<?php
session_start();
?>
対処法その2
上記対応でもNGの場合、php.iniの設定を修正すれば直る(らしい
php.iniでoutput_buffering = ON 又は output_buffering = 4096のようにすると良いらしい。
参考
対処法その3
上記2つでもNGの場合、もし文字コードがUTF-8なら、BOM付きでないか確認する。
これ、自分がハマりました。
windows上のapache+phpでは問題なく動くが、いざLinuxにもっていくと動かないという症状に悩まされます。
検証法は割と簡単で、Linuxマシン上で、エラーが出ているファイルをコピーし、コピーしたファイルの中身を全て削除後、以下のコードを打ち込みます。
<?php保存したら、php hogehoge.php(上記編集したファイル)で実行。1が表示されればまずBOMありです。
echo headers_sent();
対処法は関係するファイルの文字コードをUTF-8のBOMなしに変換する事。
これで直りました。やれやれ。
エラーの表示もう少し分かりやすくならないものかねぇ。単に出力されているぞ!ではなく”何が”出力されているのかぐらい出してくれればまだ追いかけられる物を>ブツブツ