上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
 最近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で保存し直す事でエラーはでなくなり二時間の苦悩から開放されました。めでたしめでたし。
コメント
この記事へのコメント
簡単でスミマセン。この記事、助かりました。約1時間の苦悩で済みました。
2007/11/04 (日) 20:32:31 | URL | furuya #-[ 編集]
お役に立てて幸いです。
2007/11/29 (木) 00:26:50 | URL | oubakiou #-[ 編集]
まったく同じ現象で苦しんでいたところ、
こちらの記事を読み、無事に解決できました。
本当にありがとうございます。
2009/04/16 (木) 11:07:58 | URL | makoto #-[ 編集]
承認待ちコメント
このコメントは管理者の承認待ちです
2011/07/04 (月) 02:32:34 | | #[ 編集]
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2005 The elephant vanishes all rights reserved.
Powered by FC2ブログ.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。