PHPでCookie使用の意外な落とし穴(°m°;) <自分だけかな?
2008年8月9日 [TIPS, TIPS - PHP(MySQL)]実は、自分の好みにあったアクセス解析スクリプトがないので、
(こんなことやってる場合ではなかったんだけど)自作することにした。
自分はサーバーにアップしてからPHPのエラーを修正するので(..;)、
しかも、自分のサイトもよく見るので(笑)、
自分のアクセスを除外して記録するなどのため
Cookieを使用することにした。
ところが、一部のページでどうしても、エラー。
で、エラーメッセージは…
Warning: Cannot modify header information – headers already sent by
(output started at /home/hoge/scripts.php:3)
in /home/hoge/write.php on line 39
…、スクリプトファイルを読み込みに行くだけで、なにか出力してるの?
まさか、スクリプトファイル(PHPのfunctionを格納してます)に問題があるとは思わないで、
Cookieを呼び出す部分を前の方に持っていったり…。
でも、かなり後ろに配置していても
(ちなみに、Smartyでhtmlをはき出しているので、基本的にhtmlは一番最後にはき出す)
まったく問題がない場合もあるし…。
で、よくよくエラーメッセージを見る。
(output started at /home/hoge/scripts.php:3)
の一番最後にあるのは、行番号だよなぁ。
いくつか、ほかにも同様のエラーをはき出すスクリプトファイルがあったので
じ~っくり見てみて、エラーファイルの共通点を探ると…。
!!!!!(°口°;) !!
スクリプトを記述してあるPHPファイル先頭の
<?php
の前に空白行がある。また、最終行の
?>
の後ろに改行や空白行がある!
これを取ったら、すっきりと解決。
先頭や末尾に空白行や改行があってはいけないなんて、
どっかに書いてあったっけ?
「さすが、我流!」って感じの結末でした。
そういや、自分のページのHTMLのソースに空白行が
いっぱいあるのがいつも不思議だったけど、
そのせいだったのね。
ob_end_flush()
などという、使い慣れない関数で、制御しようとまで思ってた。
ま、めでたしめでたしということで。
