2008-10-14 84 views
1

我们有一位客户试图用PHP代码调用我们用C#编写的Web服务。 Web服务调用需要很长的参数。使用长参数从PHP调用C#Web服务

此调用适用于从C#或Java调用的其他客户,但该客户从调用返回错误。我没有调试过他们的具体调用,但我猜测64位整数正在从PHP中以某种方式截断。客户说他们只是用一个字符串进行Web服务调用,但是在PHP中有一个包装类型来进行类型转换。这可能会丢失号码信息吗?

感谢您的任何信息。

回答

1

大多数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("123456789"); 
// prints 2147483647, the max value for a 32 bit signed int. 

不知道他的执行细节,很难假定什么好的解决办法/解决方法可能是。

0

如果您绝对必须采用这样的大数字,请将其设置为一个字符串,然后在您的Web服务中将其转换为long。

这会让您的其他用户感到困扰,但会让您的PHP使用者更加友好。