[PHP]:Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent
またもや、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
なるほど。焦点が間違ってましたね。
「なぜ、セッションでのエラーなのか」、じゃなかったんだ。
「スクリプトの中で、セッションが、一番最初に扱うものにエラーがある。」、だったんだ。
森博嗣が、書いてました。
人は、どう答えるかではなく、何を問うかで評価される。
臨機応答・変問自在
デバッグの基本、ですね。
