ホーム > php > peclのjsonはnumber型をintに桁落ちする

peclのjsonはnumber型をintに桁落ちする

いろいろな制約の関係でCentOS5系のPHP5.1.6でjsonの処理を行わなければならず、Jsphonだとパフォーマンス的に厳しいのでpeclのjsonを利用することになりました。

利用していたところ、mumber型がint型に桁落ちする現象に遭遇。


$ php -r "var_dump(json_decode('{\"id\":8271518654}'));"
object(stdClass)#1 (1) {
  ["id"]=>
  int(2147483647)
}

調べてみたところ、PHP5.2.1の時代にバグレポートされてその後fixされたが、peclにはバックポートされてないようでした。

PHP Bugs: #41567: json_encode double conversion is inconsistent with PHP
バグレポートを参考に修正し、phpizeしてみましたが変わらず。

PHP5.2で取り込まれてるわけですが、そこでphpizeすればいけるんじゃ?ということで5.2.3のソースをダウンロードしphpize後make成功したのでインストールしてみましたが件の件は修正されていませんでした。

結局、PHP5.2.4で修正されていることを確認したのでここに軟着陸。


$ cd /usr/local/src
$ wget http://museum.php.net/php5/php-5.2.4.tar.gz
$ tar zxf php-5.2.4.tar.gz
$ cd php-5.2.4/ext/json
$ phpize
$ ./configure
$ make
$ sudo make install
$ php -i | grep json
$ php -r "var_dump(json_decode('{\"id\":8271518654}'));"
object(stdClass)#1 (1) {
  ["id"]=>
  float(8271518654)
}

make通ったのはPHP5.2.9まで、PHP5.2.5~PHP5.2.9はjson_encodeで問題が見つかった為結局PHP5.2.4のを利用することに。
もうちょい時間があったらしっかり検証したいとこですが。

カテゴリー: php タグ: ,
  1. コメントはまだありません。
  1. トラックバックはまだありません。