【问题标题】:How can I determine whether my OS is 32 or 64 bit?如何确定我的操作系统是 32 位还是 64 位?
【发布时间】:2012-03-02 23:14:49
【问题描述】:

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

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

【问题讨论】:

  • 刚刚在我的 OsX 上测试过,它运行良好...您使用的是哪个版本? php > print php_uname("m"); x86_64
  • @Leigh:我不同意。他不想检查 webserver 的架构,而是检查底层操作系统。
  • @NiklasB:问题标题是:PHP 能否判断服务器 os 是否为 64 位。您阅读的不仅仅是公认的答案吗?

标签: php architecture operating-system x86-64


【解决方案1】:

这是一个php解决方案:)

echo strlen(decbin(~0));

【讨论】:

  • 绝妙的答案!我不确定是否 100% 正确检测,但对于我当前的机器而言,检测结果符合预期。
【解决方案2】:

更简单

echo 8 * PHP_INT_SIZE;

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 就像我在上面的评论中所说的那样,这会在 32 位英特尔中引发错误。 :(ERROR: Code = 0x80041017 Description = Invalid query Facility = WMI。我试图在命令提示符下运行它。我无法在wmic os 命令中发现 OSArchitecture
    • @Jigar:我添加了另一种方法,您可以在 32 位机器上尝试一下吗?
    • 我想我将不得不使用相同的代码。在 32 位的 else 条件下将出现错误。但我应该冒险吗?
    • @JigarD:我不会冒险。我添加了 yet 另一种适用于 64 位、WOW64 和 32 位的方法。试试看。
    • 您的其他技巧也可以正常工作。但是,如果我更改指定 32 位的条件,则再次在我的 32 位电脑中。显示的输出是 64 位的。我可以同时使用你的代码,但我觉得它有风险。
    【解决方案4】:

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

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

    了解 PHP 的体系结构可以说比了解操作系统的体系结构更重要。例如,如果您依赖 64 位操作系统在代码中做出决策,那么当 PHP 在 32 位模式下执行时(就像您现在一样),您可能会发现自己编写的代码在 64 位操作系统上会失败。这实际上是您所处的确切情况,您期望得到 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 位模式执行,则可以找到该64

    【讨论】:

      猜你喜欢
      • 2016-02-07
      • 2023-03-08
      • 2018-01-18
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 2011-04-04
      • 1970-01-01
      相关资源
      最近更新 更多