【问题标题】:Find Windows 32 or 64 bit using PHP使用 PHP 查找 Windows 32 或 64 位
【发布时间】:2011-09-12 07:02:17
【问题描述】:

是否可以获得窗口处理器位? 我想使用 php 找到窗口处理器位?? 我有编码来查找操作系统和其他属性。 好心的建议。 谢谢 - 韩

【问题讨论】:

  • 服务器或客户端属性?请参阅@Arend 的服务器链接,对于客户端,您几乎将受限于用户代理标头中的任何信息(不使用某种插件)。
  • 您需要知道操作系统是 32/64 位还是处理器? 64 位处理器可以运行 32 位操作系统。

标签: php windows


【解决方案1】:
<?php
switch(PHP_INT_SIZE) {
    case 4:
        echo '32-bit version of PHP';
        break;
    case 8:
        echo '64-bit version of PHP';
        break;
    default:
        echo 'PHP_INT_SIZE is ' . PHP_INT_SIZE;
}

这段代码 sn-p 至少会告诉您是否正在运行 32/64 位版本的 PHP。

【讨论】:

  • 如果您在函数中使用此代码,您可能希望在默认情况下抛出异常,因为确定它是 32 位还是 64 位是不安全的。
  • 不幸的是,即使在 Windows 上运行 64 位 PHP,整数仍然被限制为 32 位,因此您实际上无法确定安装了哪种类型的 PHP(仅适用于 Win)。您但是可以根据操作系统的限制做出有根据的猜测(例如,如果您在 32 位 Windows 上,则无法运行 64 位 PHP)
  • @doublehelix 这不再正确。从 Win10.1709 开始,x64 平台上的 echo PHP_INT_SIZE 报告 8 个字节。但是,它也有助于运行 64 位版本的 PHP。
  • 更新:从 PHP 7.0 开始,Windows 平台现在完全支持 64 位(8 字节)整数。 PHP 7 直到 2015 年 12 月才发布。早在 2014 年,PHP 5 就无法做到这一点。
  • 这个答案在技术上是不正确的,因为报告的大小对应于 PHP 进程,并且可以在 64 位操作系统中运行 32 位代码。
【解决方案2】:

一种更短且更可靠的获取位数的方法。

    strlen(decbin(~0));

这是如何工作的:

按位补码运算符,波浪号 ~,会翻转每一位。

@见http://php.net/manual/en/language.operators.bitwise.php

0 上使用它会打开整数的每一位。

这为您提供了 PHP 安装可以处理的最大数量。

然后使用 decbin() 将为您提供此数字的二进制形式的字符串表示

@见http://php.net/manual/en/function.decbin.php

strlen 会给你位数。

这是一个可用的函数

function is64Bits() {
    return strlen(decbin(~0)) == 64;
}

【讨论】:

  • 是什么让它比PHP_INT_SIZE 更强大?
  • 同样,这报告了 PHP 进程而不是操作系统的能力。
  • @jdp PHP_INT_SIZE 是在 5.0.5 中引入的。 decbin 自第 4 版以来一直存在。
【解决方案3】:

如果您安装了COM 扩展(在 php.ini 中),您可以调用 windows WMI 服务。

(请记住,如果您有 64 位处理器、64 位操作系统和 64 位 PHP,由于 x64-PHP 的限制,您的整数仍将是 32 位窗户。)

无论如何...

检查操作系统:

function getOsArchitecture() {
    $wmi = new COM('winmgmts:{impersonationLevel=impersonate}//./root/cimv2');
    $wmi = $obj->ExecQuery('SELECT * FROM Win32_OperatingSystem');
    if (!is_object($wmi)) {
        throw new Exception('No access to WMI. Please enable DCOM in php.ini and allow the current user to access the WMI DCOM object.');
    }
    foreach($wmi as $os) {
        return $os->OSArchitecture;
    }
    return "Unknown";
}

或者,检查物理处理器:

function getProcessorArchitecture() {
    $wmi = new COM('winmgmts:{impersonationLevel=impersonate}//./root/cimv2');

    if (!is_object($wmi)) {
        throw new Exception('No access to WMI. Please enable DCOM in php.ini and allow the current user to access the WMI DCOM object.');
    }
    foreach($wmi->ExecQuery("SELECT Architecture FROM Win32_Processor") as $cpu) {
        # only need to check the first one (if there is more than one cpu at all)
        switch($cpu->Architecture) {
            case 0:
                return "x86";
            case 1:
                return "MIPS";
            case 2:
                return "Alpha";
            case 3:
                return "PowerPC";
            case 6:
                return "Itanium-based system";
            case 9:
                return "x64";
        }
    }
    return "Unknown";
}

【讨论】:

    【解决方案4】:

    你可以这样写一个函数:

    function is_32bit(){
      return PHP_INT_SIZE === 4;
    }
    

    那么你可以这样使用它:

    if( is_32bit() ) {
        // do 32 bit stuffs
    }
    

    【讨论】:

      【解决方案5】:
      function bits() {
        return PHP_INT_SIZE * 8;
      }
      
      echo 'Php running on '.bits(). ' bits system';
      

      【讨论】:

        【解决方案6】:

        另一种选择:

        function IsAtLeast64Bit()
        {
            return defined('PHP_INT_SIZE') && PHP_INT_SIZE >= 8;
        }
        

        如果定义了 PHP_INT_SIZE,它只返回 TRUE。这应该适用于所有 64 位系统。未来超过 64 位的系统也会得到管理。

        【讨论】:

          【解决方案7】:

          &lt;?php echo $_SERVER['HTTP_USER_AGENT']; ?&gt;
          它包含在变量中,您可以分解它并从中派生它

          【讨论】:

          • 注意:这将告诉您客户端是否正在运行 32/64 位操作系统,而不是服务器。
          • 我想这是他问的,他想知道他的客户是否使用 32/64 位操作系统来改变某些东西。
          猜你喜欢
          • 2019-01-07
          • 2012-10-26
          • 1970-01-01
          • 2011-10-24
          • 1970-01-01
          • 2014-10-20
          • 2013-10-17
          • 2011-01-24
          • 2012-10-25
          相关资源
          最近更新 更多