2012-02-10 201 views
4

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

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

+1

部分重复http://stackoverflow.com/questions/6303241/find-windows-32-or-64-bit-using-php – Crontab 2012-02-10 13:45:37

+1

刚刚在我的OsX上测试过,它工作正常......哪个版本是你在用吗? 'php> print php_uname(“m”); x86_64' – 2012-02-10 13:46:41

+0

重复http://stackoverflow.com/questions/2353473/can-php-tell-if-the-server-os-it-64-bit – Leigh 2012-02-10 13:56:30

回答

1

我最好的猜测是,即使您的操作系统是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 
+0

就像我在上面的评论中所说的那样,在32位intel中抛出一个错误。 :( '错误: 代码= 0x80041017 描述=无效的查询 设施= WMI'。我尝试在命令提示符下运行此命令我无法在'wmic os'命令中找到OSArchitecture – 2012-02-10 14:30:44

+0

@Jigar:我添加了另一种方法,你可以在32位机器上试一试吗? – 2012-02-10 14:34:21

+0

我想我将不得不使用这个相同的代码,在其他情况下会出现错误,这是32位的,但是我应该冒这个风险吗? – 2012-02-10 14:36:35

8

这里是一个PHP的解决方案:)

echo strlen(decbin(~0)); 
0

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线将或者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用于64存在这将在PHP在64位模式执行被发现。

相关问题