我尝试使用<?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。
说比了解操作系统的架构更重要。例如,如果您依靠 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
将是true
或false
。
以下是同一代码的多行版本:
// 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
来工作。