PHP可以告诉服务器操作系统是64位吗?

BLA*_*AKE 24 php windows 32bit-64bit

我在这里处理Windows.

我知道你可以使用$_SERVER['HTTP_USER_AGENT']变量来检测查看页面的浏览器的操作系统,但是PHP可以检测服务器操作系统的任何方式吗?

对于我的程序的UI,我使用的是PHP网页.我需要读取注册表中的一个密钥,该密钥位于64位操作系统的不同位置(它位于Wow6432Node密钥下).

PHP可以告诉它运行的是什么操作系统吗?PHP可以判断操作系统是64位还是32位?

Kri*_*our 30

注意:这个解决方案比@Salman A的答案更不方便和慢.我建议你使用他的解决方案并检查 PHP_INT_SIZE == 8 你是否使用64位操作系统.

如果您只想回答32位/ 64位问题,那么像这样的偷偷摸摸的小函数就可以解决这个问题(利用intval函数处理基于32/64位的整数的方式.)

<?php
function is_64bit()
{
    $int = "9223372036854775807";
    $int = intval($int);
    if ($int == 9223372036854775807) {
        /* 64bit */
        return true;
    } elseif ($int == 2147483647) {
        /* 32bit */
        return false;
    } else {
        /* error */
        return "error";
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看代码:http://ideone.com/JWKIf

注意:如果操作系统是64位但运行32位版本的php,该函数将返回false(32位)...

  • 当您只能检查 PHP_INT_SIZE 常量时,为什么要使用函数调用?@Salman A 的答案要好得多。 (2认同)
  • 我实际上同意你的观点,我想我会编辑我的答案以将人们链接到他的答案...... (2认同)

Sal*_*n A 26

要检查整数(4/8字节)的大小,可以使用PHP_INT_SIZE常量.如果PHP_INT_SIZE===8那时你有一个64位版本的PHP.PHP_INT_SIZE===4意味着正在使用32位版本的PHP,但这并不意味着操作系统和/或处理器是32位的.

在Windows + IIS上,有一个$_SERVER["PROCESSOR_ARCHITECTURE"]变量包含x86在我的系统上测试时(WinXP-32bit).我认为它将包含x64在64位操作系统上运行时.


Chr*_*is0 12

获得位数的稍微更短且更稳健的方法.

    strlen(decbin(~0));
Run Code Online (Sandbox Code Playgroud)

这是如何工作的:

按位补码运算符,波浪号,,翻转每一位.

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

0上使用它可以在每个位上切换整数.

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

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

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

和strlen将给你位数.

这是一个可用的功能

function is64Bits() {
    return strlen(decbin(~0)) == 64;
}
Run Code Online (Sandbox Code Playgroud)


Joh*_*man 7

尝试使用php_uname函数...

<?php
echo php_uname('s');/* Operating system name */
echo "<br />";
echo php_uname('n');/* Host name */
echo "<br />";
echo php_uname('r');/* Release name */
echo "<br />";
echo php_uname('v');/* Version information */
echo "<br />";
echo php_uname('m');/* Machine type */
echo "<br />";
echo PHP_OS;/* constant will contain the operating system PHP was built on */
?>
Run Code Online (Sandbox Code Playgroud)

来源 - 确定操作系统 - http://www.sitepoint.com/forums/showthread.php?t=510565

另一种方法是使用......

 echo $_SERVER['SERVER_SOFTWARE']; 
Run Code Online (Sandbox Code Playgroud)

这将在运行Win 7(64位)的ibm t400上返回以下字符串...

Apache/2.2.12(Win32)DAV/2 mod_ssl/2.2.12 OpenSSL/0.9.8k mod_autoindex_color PHP/5.3.0 mod_perl/2.0.4 Perl/v5.10.0

不幸的是,它返回WIN32,因为我正在运行32位版本的apache.

您可以使用cmd获取通用处理器信息(在*nix服务器上)...

echo system('cat /proc/cpuinfo');
Run Code Online (Sandbox Code Playgroud)

如果您计划支持许多不同的操作系统,则可能需要使用这些方法的组合.