测试代码如下:$int  = 135893597710;
print_r($int);
print_r(array($int=>1));输出结果在windows上是135893597710Array ( [-1545355762] => 1 )
到linux的时候就能得到正确的结果135893597710Array ( [135893597710] => 1 )
请问如何可以在windows上得到正确的结果

解决方案 »

  1.   

    <?php$int  = '135893597710';
    print_r($int);
    print_r(array($int=>1));?>
      

  2.   

    现在的问题是,生产服是linux,里面有一批数据是serialize处理后存储的,现在我导到本地后,没办法还原,因为里面有些数组的下标就是这种很大的数字。所以,如果我想在本地使用生产服的数据抢建测试环境,必须解决上面的测试代码的输出问题
      

  3.   

    你的 linux 是 64 位的?似乎也不应该出现这种问题
    先不去管他吧,等有 64位 linux 的朋友测试以后再说
    假定序列化后的是这样的串:a:1:{i:135893597710;i:123;}
    则有
    $s = 'a:1:{i:135893597710;i:123;}';
    $s = preg_replace_callback('/i:(\d{10,});/',
      function($r) {
        return sprintf('s:%d:"%s";', strlen($r[1]), $r[1]);
      },
      $s); //将大整数改成字符串
    print_r(unserialize($s)); //检查反序列化结果
    Array
    (
        [135893597710] => 123
    )
      

  4.   

    生产服是Linux64位,但是我的windows也是64位呀,我还把php也换成64位的,未遂目前决定先用楼上的办法吧,毕竟只是测试环境,能用就好了,先不纠结了。不过如果有朋友能找到真正的原因更好~
      

  5.   

    你的windows也是64位的?那么你能自己编译 php 吗?
    php 并没有发行 for window 的 64位版本
      

  6.   

    php有第三方编译的x64
    不过
    测试最大int仍然是2^32-1 (win7 x64)
      

  7.   


    我自己编译的64位php和网上下载的wamp64位版本,都不行
      

  8.   

    既然你能自己编译 php,那么请检查一下 64位编译开关打开没有
    另外一定是要 VC9 以上的编译器,最好是 VC10 以上的