PHP可以告诉服务器是否是64位的?

我在这里处理Windows

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

对于我的程序的用户界面,我正在使用PHP网页。 我需要读取位于64位操作系统上不同位置的registry中的密钥(位于Wow6432Node密钥下)。

PHP可以告诉它在哪个操作系统上运行? PHP可以告诉操作系统是64位还是32位?

注意:这个解决方案比@Salman A的答案稍微方便一些,速度也慢一些。 我会建议你使用他的解决方案,并检查 PHP_INT_SIZE == 8 ,看看你是否在64位操作系统。

如果你只是想回答32bit / 64bit的问题,像这样一个鬼鬼祟祟的小函数会做的伎俩(利用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"; } } ?> 

你可以在这里看到这个代码: http : //ideone.com/JWKIf

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

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

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

一个稍微更短,更强大的方式来获得位数。

  strlen(decbin(~0)); 

这是如何工作的:

按位互补运算符(波浪号 )翻转每一位。

@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; } 

尝试使用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 */ ?> 

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

另一种方法是使用…

  echo $_SERVER['SERVER_SOFTWARE']; 

这将返回运行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。

你可以得到一般的处理器信息(在* nix服务器上),通过使用cmd …

 echo system('cat /proc/cpuinfo'); 

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

或者使用PHP COM来调用wmi

 $obj = new COM('winmgmts://localhost/root/CIMV2'); $wmi = $obj->ExecQuery('Select * from Win32_OperatingSystem'); foreach($wmi as $wmiCall) { $architecture = $wmiCall->OSArchitecture; } 

我已经有点转移的运气,并利用布尔铸造。

 function is64bit() { return (bool)((1<<32)-1); } // or function is32bit() { return 1<<32 === 1; } 

您可以使用一些脚本来输出Os类型

这里有一个如何使用WMI获取信息的例子。

你可以使用exec调用这个脚本并读取输出。

有点迟到的答案,但如果你只是想确定字的大小,你可以使用这个: (log(PHP_INT_MAX + 1, 2) + 1)

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

检查操作系统:

 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"; } 

不需要做计算。 只需检查PHP_INT_SIZE常量:

 if(PHP_INT_SIZE>4) // 64 bit code else // 32 bit code 

整数的大小是一个很好的指标,但不是防弹的。 有人可能会在64位系统上运行一个32位的应用程序。

$ _SERVER ['SERVER_SOFTWARE']和$ _SERVER ['SERVER_SIGNATURE']可能会告诉你一些有用的信息,这取决于服务器的实现。

这是一个单行的解决方案,以确定PHP是否在64位或32位模式下执行:

 empty(strstr(php_uname("m"), '64')) ? $php64bit = false : $php64bit = true; 

执行$php64bit变量上面的代码行后,将被设置为truefalse