余計な改行は命取り
これホント、どういうわけかわからないんですが、
ものすごくハマったのでメモ。
まずは現象…
特定のコントローラのときだけセッションが消える(セッションが読み込めない)状況になる。
例えば/contents/indexや/items/viewでは$_SESSIONが存在するのに、
/trouble/indexでは$_SESSIONが存在しないという現象。
もちろん実際にはSessionファイルは残っているしcookieもちゃんとある。
だからまた別のコントローラに変遷すると$_SESSIONが存在するというなんとも奇妙な現象。
で、原因特定までの経緯
散々色々試してみた挙句の果てに、
ちゃんとsession_start()やってんのか?コラ?
という疑問がわいてきたので、AppControllerの
beforeFilterにsession_start();を追加してみる。
すると…
問題のコントローラの32行目がなんだかおかしいぞというエラー表示が…(本当は英語だけど)
で、やっぱコントローラが悪いのかよ!と思ってその行を見てみると、なんと
?>でphpコードが終了した次の行。
その行は何も書かれていない空行。
なぜその空行がエラー…?
と、疑問に思いつつもその空行を削除してみたら
あら不思議。
なんの問題も無くセッションが読み込めました。
結論…
よくわからんけどcakeのphpファイルには余計な空行(というか改行)を入れんな!
ということで。
これってcakeだけじゃなくてphp共通のセオリーなんでしょうか?
もしかして私が無知なだけ?
もしわかる方がいらっしゃいましたら教えてプリーズ。
その後調べてみた結果以下のようなことが
ZendFrameworkのコーディング規約
PHP コードのみからなるファイルでは、終了タグ ("?>") は決して含めてはいけません (項B.2.1. 「全般」 を参照ください)。
との記述が。まあZendFrameworkの話ですが。
で、どうも<?PHP ?>直後の改行が認識されないとか、なんとかそういうこともあるようで、
単純に作法として閉じタグ"?>"の後ろには改行を入れない、もしくは
閉じタグ自体を記述しないと覚えておいた方がいいみたい。