2008-08-04 [長年日記]

_ [PHP] BOM (Byte Order Mark)

前の職場の人からメール。僕が書いたPHPスクリプトがうまく動かないんだけど、どうしたらいい?と。以下、エラーメッセージ。

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /aaa/bbb/ccc.php: 1) in /aaa/bbb/ccc.php on line 2

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent by (output started at /aaa/bbb/ccc.php: 1) in /aaa/bbb/ccc.php on line 2

どんなソースだったか全く覚えてないけど、ソースも添付してあったので中身をチェック。先頭部分に

<?php
session_start();
?>

ってあるけどおかしくなさげ。だけど、Windowsのメモ帳とかでUTF-8のファイルを保存するとBOMが付与されて、ファイルの先頭3バイトに(EF BB BF)がつくのがたぶん原因。PHPがこのゴミを無視してくれれば何も問題ないんだけど、これを出力してしまうからね。

BOM付きUTF-8ファイルを見てみる(x86版RHEL ES 4.7上で実行。なのでリトルエンディアンです)と、

$ hexdump -x ccc.php |head -n 1
0000000 bbef 3cbf 703f 7068 730a 7365 6973 6e6f

のようになっており、確かに先頭3バイトにef bb bfが入っている。BOMなしUTF-8ファイルを見てみると、

$ hexdump -x ccc.php |head -n 1
0000000 3f3c 6870 0a70 6573 7373 6f69 5f6e 7473

となっており、BOMはついていない。ちなみにビッグエンディアンのSPARC Solaris 10上で見てみると、BOM付きUTF-8ファイルは、

$ od -x ccc.php | head -1
0000000 efbb bf3c 3f70 6870 0a73 6573 7369 6f6e

で、ちゃんとef bb bfの順に見える。

本日のツッコミ(全6件) [ツッコミを入れる]
_ Ndtfcxnc (2008-10-16 05:15)

perfect design thanks <a href=" http://www.blackplanet.com/Joseffxz/ ">free porno tube</a> mqt

_ Kfaqilvp (2008-10-17 08:17)

Excellent work, Nice Design <a href=" http://www.blackplanet.com/Skupers/ ">safeanalsex</a> =OOO

_ Lmnrlfff (2008-10-17 09:13)

Hello good day <a href=" http://www.blackplanet.com/Eper/ ">bbw porntube</a> 8156

_ Figovzcy (2008-10-17 11:15)

Good crew it's cool :) <a href=" http://www.blackplanet.com/SilviaS/ ">horoscopesex</a> vfzy

_ Qonvlpje (2008-10-17 11:51)

Jonny was here <a href=" http://www.blackplanet.com/Susanin/ ">like redtube</a> %]]

_ Qpgbzmkk (2008-10-17 14:24)

real beauty page <a href=" http://www.blackplanet.com/SuperPizdec/ ">lolita pre-teen girl nude pics</a> uvhyl

[]