Windows-Server-2008

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

  • March 31, 2014

這可能不是這個問題的正確位置,如果不是,請指向正確的 SE 站點。

該函式的 PHP 文件ip2long指出:

筆記

因為 PHP 的整數類型是有符號的,所以很多 IP 地址在 32 位架構上會產生負整數

哪個很好,但是如果 PHP 的版本有所不同,我有點困惑?

我正在執行安裝了 32 位 PHP 的 64 位 Server 2008,並且我得到了帶有一些 IP 地址的負整數。我顯然是在 64 位架構上執行的,所以根據(誠然非常模糊的)文件,情況不應該如此。

我只能假設這是因為我正在執行 32 位 PHP?但我無法在任何地方證實這一點。

您是正確的,因為您正在執行 32 位版本的 PHP。由於它被編譯為 32 位應用程序,儘管在 64 位系統上執行,您仍然不會得到 64 位整數。

還應該注意的是,在 Windows 上編寫 64 位版本的 PHP 時,不提供 64 位整數(或大文件支持),因此即使您使用 64 位版本,您仍然會遇到整數溢出。

您可以嘗試使用sprintfwith%u格式來嘗試獲取 64 位數字的字元串表示形式。我將此程式碼用於執行在 32 位上的舊 PHP4 應用程序,我想列印出一個 64 位整數。請注意,如果您需要執行除了輸出 64 位數字之外的任何操作,它可能不適合。

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

引用自:https://serverfault.com/questions/585688