新年一発目です。今年もよろしくお願いいたします。
Excel_ReviserというPHPでExcelを吐ける便利なライブラリがあるのですが、こいつが64bitで動かないので困る案件が発生したので解析してみました。
【主因】
PHP_INT_SIZEが4以外の場合が考慮されてない。
__get4()と$eocの生成に影響が出てます。
signed int4 で FFFFFFは-1ですが、signed int8 で FFFFFFは4294967295ですもんね…。
【対策】
- $eocは-2にしたいようなので、-2をダイレクトに代入するように変更。
- __get4()内では、PHP_INT_SIZEが4を超えており、かつ返却値が0x80000000以上の場合は0x100000000を引いた値を返すように変更。
でとりあえず動きました。まる。