64 位 Windows Server 2008 上的 x86/32 位 PHP

64 位 Windows Server 2008 上的 x86/32 位 PHP

这可能不是提出此问题的正确地方,如果不是,请告诉我正确的 SE 网站。

该函数的 PHP 文档ip2long指出:

笔记

由于 PHP 的整数类型是有符号的,因此许多 IP 地址在 32 位架构上将导致负整数

这很好,但是我有点困惑 PHP 的版本是否会有所不同?

我运行的是 64 位 Server 2008,安装了 32 位 PHP,但某些 IP 地址却显示负整数。我显然是在 64 位架构上运行,因此根据(非常模糊的)文档,情况不应该如此。

我只能假设这是因为我运行的是 32 位 PHP?? 但我无法在任何地方证实这一点。

答案1

您说得对,这是因为您运行的是 32 位版本的 PHP。由于它是作为 32 位应用程序编译的,因此尽管在 64 位系统上运行,您仍然无法获得 64 位整数。

还应注意,在编写本文时,Windows 上的 64 位 PHP 版本不提供 64 位整数(或大文件支持),因此即使您使用 64 位版本,仍然会遇到整数溢出。

您可以尝试使用sprintf使用%u格式尝试获取 64 位数的字符串表示。我将此代码用于在 32 位上运行的旧 PHP4 应用程序,我想打印出 64 位整数。请注意,如果您需要执行除输出 64 位数以外的任何其他操作,则它可能不合适。

$string = sprintf('%u', $someBigInteger);

相关内容