2009-09-26 64 views

回答

86

PHP有很多predefined constants這往往是有用的。

在這裏,PHP_OS是你正在尋找的。


舉例來說,我現在的機器上,此代碼:

var_dump(PHP_OS); 

給出:

string 'Linux' (length=5) 


你有一些實例和比較有什麼功能可以得到你在manual page of php_uname;例如(引用)

<?php 
echo php_uname(); 
echo PHP_OS; 

/* Some possible outputs: 
Linux localhost 2.4.21-0.13mdk #1 Fri Mar 14 15:08:06 EST 2003 i686 
Linux 

FreeBSD localhost 3.2-RELEASE #15: Mon Dec 17 08:46:02 GMT 2001 
FreeBSD 

Windows NT XN1 5.1 build 2600 
WINNT 
*/ 

if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { 
    echo 'This is a server using Windows!'; 
} else { 
    echo 'This is a server not using Windows!'; 
} 

該頁面還表示:

對於剛剛工作 系統的名稱,可考慮使用PHP_OS 不變,但要記住這 不變將包含操作 系統PHP是內置上。

+5

怎麼能PHP_OS以往「相當合作好「,如果它給你的操作系統PHP建立在?它遲早會被打破。 – Pacerier 2014-12-12 11:32:26

27

請記住,PHP_OS實際上包含構建PHP的平臺。這可能與其部署的平臺不同。因此php_uname('s')更可靠。

+0

'在Windows 7上的php_uname('s')'返回「Windows NT」,所以我不知道它有多可靠:)我猜可以爭論Win 7基於NT但仍... – 2013-12-31 05:53:59

+7

Windows 7絕對是Windows NT(版本6.1)。 Vista是Windows NT 6,XP是NT 5.1,2000是NT 5.所以是的,它是可靠的!檢查[這裏](http://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions)以供參考。在cmd提示符處鍵入'ver'以查看Win OS的版本號。 – spikyjt 2014-01-06 00:28:05

+1

這對我來說似乎是正確的答案。接受的答案是錯誤的,並且不回答OP的問題。 – 2016-04-21 21:51:31

2

有兩種不同的方式來檢查您的PHP運行在其上的平臺。

  1. 使用PHP_OS這是一個常量,將指向你的PHP始建於它的「操作 系統名稱」。
  2. 使用PHP內置函數php_uname(),將告訴你有關平臺的更多 (操作系統名稱,主機名,版本 信息,釋名,機器類型)你的腳本運行就可以了 。
-2
$user_agent  = $_SERVER['HTTP_USER_AGENT']; 
function getOS() { 

    global $user_agent; 

    $os_platform = "Unknown OS Platform"; 

    $os_array  = array(
          '/windows nt 6.2/i'  => 'Windows 8', 
          '/windows nt 6.1/i'  => 'Windows 7', 
          '/windows nt 6.0/i'  => 'Windows Vista', 
          '/windows nt 5.2/i'  => 'Windows Server 2003/XP x64', 
          '/windows nt 5.1/i'  => 'Windows XP', 
          '/windows xp/i'   => 'Windows XP', 
          '/windows nt 5.0/i'  => 'Windows 2000', 
          '/windows me/i'   => 'Windows ME', 
          '/win98/i'    => 'Windows 98', 
          '/win95/i'    => 'Windows 95', 
          '/win16/i'    => 'Windows 3.11', 
          '/macintosh|mac os x/i' => 'Mac OS X', 
          '/mac_powerpc/i'  => 'Mac OS 9', 
          '/linux/i'    => 'Linux', 
          '/ubuntu/i'    => 'Ubuntu', 
          '/iphone/i'    => 'iPhone', 
          '/ipod/i'    => 'iPod', 
          '/ipad/i'    => 'iPad', 
          '/android/i'   => 'Android', 
          '/blackberry/i'   => 'BlackBerry', 
          '/webos/i'    => 'Mobile' 
         ); 

    foreach ($os_array as $regex => $value) { 

     if (preg_match($regex, $user_agent)) { 
      $os_platform = $value; 
     } 

    } 

    return $os_platform; 

} 

$user_os = getOS(); 


$device_details = "<strong>Operating System: </strong>".$user_os.""; 

print_r($device_details); 
1

PHP不提供任何功能,以獲得分配的名稱,類似於Linux命令uname,這意味着它不提供有關分佈本身的任何信息。

也沒有PHP_OS給予信息。關於分配但操作系統類型(例如Linux/Windows)。

我認爲最好的方法來知道什麼操作系統/分佈正在運行讀取/etc/os-release,好處是這個文件具有所有用戶的讀取權限,壞的是它可能無法在共享主機上工作。

在這裏,我寫了一個很簡單的PHP函數讀取和轉換os-release到一個數組:

function getOSInformation() 
    { 
     if (false == function_exists("shell_exec") || false == is_readable("/etc/os-release")) { 
      return null; 
     } 

     $os   = shell_exec('cat /etc/os-release'); 
     $listIds = preg_match_all('/.*=/', $os, $matchListIds); 
     $listIds = $matchListIds[0]; 

     $listVal = preg_match_all('/=.*/', $os, $matchListVal); 
     $listVal = $matchListVal[0]; 

     array_walk($listIds, function(&$v, $k){ 
      $v = strtolower(str_replace('=', '', $v)); 
     }); 

     array_walk($listVal, function(&$v, $k){ 
      $v = preg_replace('/=|"/', '', $v); 
     }); 

     return array_combine($listIds, $listVal); 
    } 

此功能打印這樣的:

Array 
(
    [name] => Ubuntu 
    [version] => 16.04.2 LTS (Xenial Xerus) 
    [id] => ubuntu 
    [id_like] => debian 
    [pretty_name] => Ubuntu 16.04.2 LTS 
    [version_id] => 16.04 
    [home_url] => http://www.ubuntu.com/ 
    [support_url] => http://help.ubuntu.com/ 
    [bug_report_url] => http://bugs.launchpad.net/ubuntu/ 
    [version_codename] => xenial 
    [ubuntu_codename] => xenial 
) 

舉行OG lykke [1]; - )

[1]丹麥語的意思是好運。

3

由於PHP 7.2.0的,我們有一個新的預定義的常量來獲得操作系統家族即PHP_OS_FAMILY。 它返回一個字符串 「Windows」,「BSD」,「OSX」,「Solaris」,「Linux」或「未知」中的任一個。

相關問題