代码之家  ›  专栏  ›  技术社区  ›  Brad Patton

使用带有长参数的PHP从调用C#web服务

  •  1
  • Brad Patton  · 技术社区  · 17 年前

    此调用对于从C#或Java调用的其他客户来说效果很好,但此客户从调用中返回了一个错误。我还没有调试他们的特定调用,但我猜64位整数是被PHP截断的。客户说他们只是用一个字符串调用web服务,但是PHP中有一个进行类型转换的包装器。这会不会丢失号码信息?

    4 回复  |  直到 17 年前
        1
  •  1
  •   Peter Bailey    17 年前

    大多数PHP安装不支持64位整数-32是最大值。您可以通过读取PHP_INT_SIZE常量(4=32位,8=64位)或读取PHP_INT_max值来检查这一点。

    <?php
    
    echo PHP_INT_SIZE, "\n", PHP_INT_MAX;
    
    ?>
    

    如果他使用的web服务类正在尝试将64位整数的字符串表示形式转换为类型转换,那么是的,它很可能被截断或转换为浮点。通过这个简单的测试,您可以看到这种行为

    <?php
    
    echo intval( "12345678901234567890" );
    // prints 2147483647, the max value for a 32 bit signed int.
    

        2
  •  0
  •   Francisco Soto    17 年前

    如果您确实需要这样一个大数字,请将其设置为字符串,并在web服务中将其转换为long。

    这会让您的其他用户有点烦恼,但会使您的PHP使用客户更加友好。

        3
  •  0
  •   FlySwat    17 年前

    PHP残忍地破坏了它的整数支持,以至于您无法预测特定安装将处理32位或64位整数。

    有关PHP的epic fail的参考:

    http://www.mysqlperformanceblog.com/2007/03/27/integers-in-php-running-with-scissors-and-portability/