2009.05.06.
require文の謎
mixiアプリに手を出して謎な現象にさんざん悩みましたが解決しました。
【経緯】
JSAPIでPHPにPOSTメソッドでリクエストを送ってXML形式のレスポンスを受け取っているのですが、なぜかPHPでrequire文を使っていると受信できません(include文でも同じ)。
【考察】
require文をコメントアウトすると受信できます。
参照先のPHPではdefineを一個やっているだけです。
define文を削っても、requireするだけでダメっぽいです。
HTMLから同じPHPにPOSTするとちゃんと返ってきます。
アプリからもテキストとして受け取ると受信できます。
受信はしてるけどXMLとして解釈できなくなっているのかも。
アプリ側でresponse.errorsを表示してみると、"Unable to parse XML"。
require文が標準出力にゴミを出してるっぽいです。
xml宣言文の出力とrequire文の順序を入れ替えてもダメ。
エンコードをUTF-8からUTF-8(bomなし)にしたら読めました。
【結論】
PHPをUTF-8(bomつき)で書くと、出力にゴミが出る事があるようです。
とりあえず解決して良かった。
require文を諦めようかとか、DOMじゃなくてJSONにしようかとか考えちゃいました。
【参考】
結論が出てからだとググるのも楽ですね。
かなり古い既知のバグのようです。
→PHPがBOM付きUTF-8をうまく処理してくれない件
BTSではWon'tFix。
確かに知っている人にとってはどうでもいいバグなのですが
。
→Bug #22108 php doesn't ignore the utf-8 BOM
この記事のトラックバックURL:
http://honmono.no-ip.biz/cgi-bin/mt/mt-tb.cgi/735

