如何确定我的操作系统是32位还是64位?
我尝试使用<?php echo php_uname("m"); ?>
,它返回i586但我在Windows 7 64位,我可以在我的计算机属性中看到。所以我期待输出x86_64。是否有人知道如何确定PHP中的操作系统架构?如何确定我的操作系统是32位还是64位?
我也想为Mac OS X做同样的事情。任何帮助,将不胜感激。
我最好的猜测是,即使您的操作系统是64位,您的Web服务器是x86,并运行在WOW64模式(32位)。如果是这样的话,应该很难弄清楚纯PHP。
我的建议(感谢雷链接到类似的问题)是使用WMI:
$out = array();
exec("wmic cpu get DataWidth", $out);
$bits = strstr(implode("", $out), "64") ? 64 : 32;
echo $bits; // 32 or 64
就像我在上面的评论中所说的那样,在32位intel中抛出一个错误。 :( '错误: 代码= 0x80041017 描述=无效的查询 设施= WMI'。我尝试在命令提示符下运行此命令我无法在'wmic os'命令中找到OSArchitecture – 2012-02-10 14:30:44
@Jigar:我添加了另一种方法,你可以在32位机器上试一试吗? – 2012-02-10 14:34:21
我想我将不得不使用这个相同的代码,在其他情况下会出现错误,这是32位的,但是我应该冒这个风险吗? – 2012-02-10 14:36:35
这里是一个PHP的解决方案:)
echo strlen(decbin(~0));
更简单
echo 8 * PHP_INT_SIZE;
php_uname
检查PHP的运行模式不是操作系统。
因此,如果您的操作系统是64位,但php_uname
是返回i586,这是因为您正在运行的PHP的32位版本。
了解PHP的体系结构可以说比知道OS的体系结构更重要。例如,如果您依赖64位操作系统来编写代码,您可能会发现自己编写的代码在64位操作系统上失败时,PHP以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
用于64
存在这将在PHP在64位模式执行被发现。
部分重复http://stackoverflow.com/questions/6303241/find-windows-32-or-64-bit-using-php – Crontab 2012-02-10 13:45:37
刚刚在我的OsX上测试过,它工作正常......哪个版本是你在用吗? 'php> print php_uname(“m”); x86_64' – 2012-02-10 13:46:41
重复http://stackoverflow.com/questions/2353473/can-php-tell-if-the-server-os-it-64-bit – Leigh 2012-02-10 13:56:30