如何确定我的操作系统是 32 位还是 64 位


How can I determine whether my OS is 32 or 64 bit?

我尝试使用<?php echo php_uname("m"); ?>,它返回i586,但我使用的是Windows 7 64位,我可以在我的计算机属性中看到。所以我期待输出x86_64。有没有人知道如何在PHP中确定操作系统架构?

我也想为Mac OS X做同样的事情。任何帮助将不胜感激。

这是一个 php 解决方案:)

echo strlen(decbin(~0));

更简单

echo 8 * PHP_INT_SIZE;

我最好的猜测是,即使您的操作系统是 64 位,您的 Web 服务器也是 x86 并以 WOW64 模式(32 位(运行。如果是这样的话,在纯PHP中应该很难弄清楚。

我的建议(感谢 Leigh 链接到类似的问题(是使用 WMI:

$out = array();
exec("wmic cpu get DataWidth", $out);
$bits = strstr(implode("", $out), "64") ? 64 : 32;
echo $bits; // 32 or 64

php_uname检查PHP的操作模式而不是操作系统的操作模式。

因此,如果您的操作系统是 64 位php_uname但返回 i586,那是因为您运行的是 32 位版本的 PHP

了解PHP的架构可以

说比了解操作系统的架构更重要。例如,如果您依靠 64 位操作系统来在代码中做出决策,您可能会发现自己在 64 位操作系统上编写的代码在 32 位模式下执行时失败(就像您现在一样(。这实际上是您所处的确切情况,您期望 64 位的结果,但得到 32 位的结果,这是因为 PHP 的操作模式。

问题的真正解决方案是在 64 位操作系统上下载并安装 64 位版本的 PHP,以查看 64 位结果。


下面是一个简单的 1 行代码来检测 PHP 是以 64 位还是 32 位执行:

empty(strstr(php_uname("m"), '64')) ?  $php64bit = false : $php64bit = true;

执行上面的行后,$php64bit将是truefalse

以下是同一代码的多行版本:

// detect which version of PHP is executing the script (32 bit or 64 bit)
if(empty(strstr(php_uname("m"), '64'))){
  $php64bit = false;
}else{
  $php64bit = true;
}

这通过检查php_uname是否存在 PHP 在 64 位模式下执行时会发现的64来工作。