PHPでリダイレクトしたら画面が真っ白

Posted by joeartsea on 2009-02-02

なんじゃこりゃ。こんなことで何十分ハマってんだよ。というのがあったので書いておきます。

CakePHPでリダイレクト先が真っ白…ログを見てもエラーが吐かれていない。んんん?随分PHP触ってるけどこんなん初めてだぞ?エラーも出ない。ステップ実行してもリダイレクトするけどやっぱりブラウザに空白画面が表示されるだけ。おいおい、なんじゃこりゃ。CakePHPのバグか?

検索してもキーワードがまずいのか良い情報が出ず。しょうがないのでredirectメソッドのソース見るとPHPのheaderで飛ばしてるだけ。そりゃそうだよね…なんで?まあ、落ち着け。原点に返って久々にPHPのマニュアルでも見ようじゃないか。そんで見たのがPHP: header - Manual

覚えておいて頂きたいのは、header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。 頻出するエラーとして、include() または require() 関数、他のファイルをアクセスする関数に 空白または空行があり、header() の前に出力が 行われてしまうというものがあります。同じ問題は、単一の PHP/HTML ファイルを使用している場合でも存在します。

そ、そげな…

つまりHTML埋め込みという特性のための現象ということか…そういえばPHPってHTML埋め込み言語だったよね…ということで""の後ろとか見たけど…これまた改行とかスペースとかないんですよね。関係のあるファイルにもない。あれー?おかしいな、これでもないのかなー…

で、最後に"php header 空白"でググって判明した原因はBOM。ファイルの文字コードはUTF-8だったんですが、terapadで確認したらBOM付だったらしい。UTF-8Nで保存しなおして実行したら正常にリダイレクト。はぁ、しょうもない…