最近UTF-8でWAMP(Windows+Apache+MySQL+PHP)環境を再構築しているのだけれど、セッション絡みのページがエラーを吐いて詰まってしまいました。
エラーメッセージは、Warning: Cannot modify header information - headers already sentうんたらかんたら。あんさん今からheader送ろうとしてるけど、もう既にheader出力してるやないとか何とか。
問題のコードはこんな感じ。
1行目 <?php
2行目 session_start();
いや、何も出力してないし。
1行目 <?php session_start();
こんな事もしてみたけどやっぱり同じエラーが1行目で検出される。
それで色々調べてみると、これはPHPのバグらしい。
Bug #22108 php doesn't ignore the utf-8 BOM
対象OSは全て、対象のPHPバージョンは全て、StatusはWont fix。
UTFについてはここが参考になった。
UTFとは何か
つまり、UTF-8と呼ばれているものにはBOM(Byte Order Mark、Little EndianかBig Endianかを区別するために先頭につけられるビット列)付きUTF-8とBOM無しUTF-8(UTF-8n)があり、PHPはこのBOM付きUTF-8のBOMをちゃんと処理(無視)してくれないという事。
1行目 <?php
2行目 session_start();
だと思っていたけれど、実際にはソースは
1行目 BOM(EFBBBF)<?php
2行目 session_start();
となっていて、このBOMをPHPがheaderと勘違いしてギャーギャー言っていたというわけだね、明智君。
というわけで、とりあえずファイルを全てUTF-8nで保存し直す事でエラーはでなくなり二時間の苦悩から開放されました。めでたしめでたし。
エラーメッセージは、Warning: Cannot modify header information - headers already sentうんたらかんたら。あんさん今からheader送ろうとしてるけど、もう既にheader出力してるやないとか何とか。
問題のコードはこんな感じ。
1行目 <?php
2行目 session_start();
いや、何も出力してないし。
1行目 <?php session_start();
こんな事もしてみたけどやっぱり同じエラーが1行目で検出される。
それで色々調べてみると、これはPHPのバグらしい。
Bug #22108 php doesn't ignore the utf-8 BOM
対象OSは全て、対象のPHPバージョンは全て、StatusはWont fix。
UTFについてはここが参考になった。
UTFとは何か
つまり、UTF-8と呼ばれているものにはBOM(Byte Order Mark、Little EndianかBig Endianかを区別するために先頭につけられるビット列)付きUTF-8とBOM無しUTF-8(UTF-8n)があり、PHPはこのBOM付きUTF-8のBOMをちゃんと処理(無視)してくれないという事。
1行目 <?php
2行目 session_start();
だと思っていたけれど、実際にはソースは
1行目 BOM(EFBBBF)<?php
2行目 session_start();
となっていて、このBOMをPHPがheaderと勘違いしてギャーギャー言っていたというわけだね、明智君。
というわけで、とりあえずファイルを全てUTF-8nで保存し直す事でエラーはでなくなり二時間の苦悩から開放されました。めでたしめでたし。
この記事へのコメント
簡単でスミマセン。この記事、助かりました。約1時間の苦悩で済みました。
2007/11/04 (日) 20:32:31 | URL | furuya #-[ 編集]
お役に立てて幸いです。
2007/11/29 (木) 00:26:50 | URL | oubakiou #-[ 編集]
| ホーム |