1

我们有一个客户试图从 PHP 代码调用我们用 C# 编写的 Web 服务。Web 服务调用需要一个 long as 参数。

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

感谢您提供任何信息。

4

4 回答 4

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

在不知道他的实现细节的情况下,很难假设一个好的解决方案/解决方法可能是什么。

于 2008-10-14T20:09:18.867 回答
0

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

这会稍微打扰您的其他用户,但会使其对使用 PHP 的客户更加友好。

于 2008-10-14T23:05:32.397 回答
0

PHP 残酷地扼杀了它的整数支持,以至于您无法以可预测的方式知道它的特定安装将处理 32 位或 64 位整数。

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

有关 PHP 史诗般失败的参考:

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

于 2008-10-14T23:22:41.787 回答
0

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

于 2009-10-01T01:49:07.187 回答