[PHP]:Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent

2008/06/21 13:06:13
カテゴリ:Web > PHP

またもや、PHPのWarning 「header already sent by (...)」 ネタです。

今度は別の個人で受けた案件で、「超特急で、メール送信フォームをお願いします!」というのがありました。
まぁ、メールフォームくらいならすぐ出来ますよ、ってなもんで、
既存でサーバに上がってたHTMLをダウンロードしてきて、PHP化して、
ちゃちゃっと終わらせようとしたら、またもや Warningで、 「header already sent by (...)」が!

詳細はこれ。

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at hoge.php:1) in hoge.php on line 5

line 5 に書かれているのは「 session_start(); 」。

むむむ?
前回の記事のように、ファイルの頭に、余分な改行も、空白もありません。

で、今回の「超特急」でお願いされた仕事でもあり、いろいろ確認をすっとばしてたところを、
真面目に再確認。

おお!UTF-8 だ!これか?!
普段、PHPはEUCで書いてて、UTFなんかで書かないですもん。

でも、content の宣言もUTF-8で、ファイル保存形式も・・・、「UTF-8」!
これか?
日本語、使ってるぞ!?

で、「UTF-8N」に保存し直して、一件落着。

でも、なぜ「 SESSION 」についてのエラーなんでしょう?
2行目から4行目は、なんでエラーにならないんでしょう?
(行数が違うってことは、当然、改行コードも入ってるし。)

あぁ、そうか。処理の中で一番最初に日本語が出てくるのは、セッション内に
格納された、日本語文字列か orz

なるほど。焦点が間違ってましたね。
「なぜ、セッションでのエラーなのか」、じゃなかったんだ。
「スクリプトの中で、セッションが、一番最初に扱うものにエラーがある。」、だったんだ。

森博嗣が、書いてました。

人は、どう答えるかではなく、何を問うかで評価される。
臨機応答・変問自在

デバッグの基本、ですね。