2010-04-13 12:33 am

TwitterのAPIをjson_decodeするときに、idの値がオーバーフローする 編集

勉強がてらにTwitterのクライアントっぽいものを作ったりしてるんだけど、PHPでAPIからjsonを受けとってjson_decodeするときに、idの値がどうもおかしい。すべて同じ値になってしまっていた。

で、調べてみると、json_decodeしたときに整数の値が2147483647を越えていると、すべて2147483647になってしまうということらしい。

PHPのバグとしては既に修正されているようで、実際自分のローカルのMAMP環境では再現しなかった。しかし、実際にアプリを動かすサーバはレンタルなので、対処しなければいけない。

とりあえず、今回の場合は整数なのはidの部分だけなので、下記のようなコードを加えることで対処できる。

$json = preg_replace( '/id":(\d+)/', 'id":"\1"', $json );

こんな感じで、オーバーフローをおこしている部分を文字列として置換してやればOK。

PHPの最新版を入れてれば大丈夫だと思うけど、同じ問題で悩んでる人もいるかもしれないので、一応メモ。