这可能不是这个问题的正确地方,如果不是,请指出正确的SE网站。
函数ip2long的PHP文档声明:
注意
由于PHP的整数types是有符号的,因此在32位体系结构中,许多IP地址将导致负整数
这是好的,但是我有点困惑,如果PHP的版本有所作为?
我正在运行安装了32位PHP的64位Server 2008,并且我得到了一些IP地址的负整数。 我明显在64位体系结构上运行,所以根据(不可否认的是非常模糊的)文档,情况并非如此。
我只能假设这是因为我正在运行32位PHP? 但是我无法证实这一点。
你是正确的,因为你正在运行一个32位版本的PHP。 由于它是作为一个32位应用程序编译的,尽pipe在64位系统上运行,你仍然没有得到64位整数。
还应该注意的是,在编写Windows 64位版本的PHP时,不提供64位整数(或大文件支持),所以即使使用64位版本,仍然会遇到整数溢出。
您可以尝试使用%u格式的sprintf来尝试获取64位数字的string表示forms。 我使用这个代码与旧的PHP4应用程序运行在32位,我想打印出一个64位整数。 请注意,如果您不需要输出64位数字,则可能不适用。
$string = sprintf('%u', $someBigInteger);