PHPで大きい数値を比較する

phpの32bit環境で大きい数値を比較したい。
比較対象の数値データはデータベースに保存されていて、いくつかに分かれている。
それぞれの数値をSELECTで取得し、加算して比較する。

そのさい、

if ( intval( $num1 ) < intval( $num2 ) ) {

のようにintvalで「数値化」して比較していた。


上記のような状態でソースコードがあり、数値が大きくなったときに条件式がうまく動かない、というバグがあるらしい。
調べたら、intvalは数値をintとして変換するため、32bit環境では限界がある。

http://php.net/manual/ja/function.intval.php

比較しているのがbyte単位での数値だったので、KB/MB単位で比較するようにするか、GB単位ほどの比較であればfloatにキャストすればいいかなと思った。

<?php
    $num = '12345678901234';

    var_dump( $num );
    var_dump( intval( $num ) );
    var_dump( (int)$num );
    var_dump( (float)$num );

string(14) "12345678901234"
int(2147483647)
int(2147483647)
float(12345678901234)