这可能不是提出此问题的正确地方,如果不是,请告诉我正确的 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);