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

此调用适用于从C#或Java调用的其他客户,但此客户从通话中收到错误。我没有调试他们的特定调用,但我猜测64位整数从PHP以某种方式被截断。客户说他们只是用字符串进行Web服务调用,但PHP中有一个包装器进行类型转换。这会丢失号码信息吗?

感谢您的任何信息。

有帮助吗?

解决方案

大多数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.

在不了解其实施细节的情况下,很难假设一个好的解决方案/解决方案可能是什么。

其他提示

如果您绝对必须使用这样的大数字,请将其设为字符串,并在Web服务中将其转换为long。

这会让你的其他用户感到烦恼,但会让你对使用PHP的客户更友好。

PHP残忍地谋杀了它的整数支持,以至于您无法预知某个特定安装将处理32位或64位整数。

处理此问题的最简单方法是公开一个带有字符串的新端点,然后将其投射到最后。

关于PHP的史诗失败的参考:

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

我写了一篇关于PHP的文章,使用nuSoap来调用C#Web服务......还没有遇到长int转换的问题,但我肯定会运行一些测试,看看是否应该将它添加到我的文章中。谢谢,肖恩 http://seanmcilvenna.com/blog/7-general/24-窗口 - PHP-发展

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top