2014-01-15 31 views
2

的輸出從manual我得到的信息:如何解讀php_uname

mode is a single character that defines what information is returned: 

    'a': This is the default. Contains all modes in the sequence "s n r v m". 
    's': Operating system name. eg. FreeBSD. 
    'n': Host name. eg. localhost.example.com. 
    'r': Release name. eg. 5.1.2-RELEASE. 
    'v': Version information. Varies a lot between operating systems. 
    'm': Machine type. eg. i386. 

所以我創建了一個功能

function interpret_php_uname(){ 
    $release_info["os_name"] = php_uname('s'); 
    $release_info["uname_version_info"] = php_uname('v'); 
    $release_info["machine_type"] = php_uname('m'); 
    $release_info["php_uname"] = php_uname(); 
    return $release_info; 
} 

有沒有辦法從我UNAME獲得更多有用的信息在Ubuntu上?

Linux geisterhaufen 3.11.0-15-generiC#23-Ubuntu SMP Mon Dec 9 18:17:04 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux 

尤其摸清分佈(俏皮 「的Ubuntu 13.10」)從部分 「uname_version_info」 這是我這臺機器上:

#23-Ubuntu SMP Mon Dec 9 18:17:04 UTC 2013 
+0

「r」標誌至少在版本上不會給你想要的東西嗎? – Jon

+0

不是。那是內核版本 – rubo77

回答

1
<?php 
function interpret_php_uname(){ 
    $release_info["os_name"] = php_uname('s'); 
    $release_info["uname_version_info"] = php_uname('v'); 
    $release_info["machine_type"] = php_uname('m'); 
    $release_info["kernel"] = php_uname('r'); 
    $release_info["php_uname"] = php_uname(); 

    $distribution["4.10"]=array("Warty Warthog", "2.6.8"); 
    $distribution["5.04"]=array("Hoary Hedgehog", "2.6.10"); 
    $distribution["5.10"]=array("Breezy Badger", "2.6.12"); 
    $distribution["6.06"]=array("Dapper Drake", "2.6.15"); 
    $distribution["6.10"]=array("Edgy Eft", "2.6.17"); 
    $distribution["7.04"]=array("Feisty Fawn", "2.6.20"); 
    $distribution["7.10"]=array("Gutsy Gibbon", "2.6.22"); 
    $distribution["8.04"]=array("Hardy Heron", "2.6.24"); 
    $distribution["8.10"]=array("Intrepid Ibex", "2.6.27"); 
    $distribution["9.04"]=array("Jaunty Jackalope", "2.6.28"); 
    $distribution["9.10"]=array("Karmic Koala", "2.6.31"); 
    $distribution["10.04"]=array("Lucid Lynx", "2.6.32"); 
    $distribution["10.10"]=array("Maverick Meerkat", "2.6.35"); 
    $distribution["11.04"]=array("Natty Narwhal", "2.6.38"); 
    $distribution["11.10"]=array("Oneiric Ocelot", "3.0"); 
    $distribution["12.04"]=array("Precise Pangolin", "3.2"); 
    $distribution["12.10"]=array("Quantal Quetzal", "3.5"); 
    $distribution["13.04"]=array("Raring Ringtail", "3.8"); 
    $distribution["13.10"]=array("Saucy Salamander", "3.11"); 
    $distribution["14.04"]=array("Trusty Tahr", "3.13"); 

    foreach($distribution as $distribution=>$name_kernel){ 
     list($name,$kernel)=$name_kernel; 
     if(version_compare($release_info["kernel"],$kernel,'>=')) { 
      $release_info["ubuntu_distribution"]=$distribution; 
      $release_info["ubuntu_distribution_name"]=$name; 
     } 
    } 

    return $release_info; 
} 
$release_info=interpret_php_uname(); 
var_export($release_info); 

將例如打印:

array (
    'os_name' => 'Linux', 
    'uname_version_info' => '#23-Ubuntu SMP Mon Dec 9 18:17:04 UTC 2013', 
    'machine_type' => 'x86_64', 
    'kernel' => '3.11.0-15-generic', 
    'php_uname' => 'Linux geisterhaufen 3.11.0-15-generiC#23-Ubuntu SMP Mon Dec 9 18:17:04 UTC 2013 x86_64', 
    'ubuntu_distribution' => '13.10', 
    'ubuntu_distribution_name' => 'Saucy Salamander', 
) 
0

沒有,沒有。 uname函數僅報告有關正在運行的內核的信息 - 它不包含有關正在使用的Linux分發的任何信息。內核版本可能會有時順帶包含分配的名稱,但這並非總是如此。

根據正在使用的Linux發行版,信息可以在各種文件可在/etc,包括但不限於:

/etc/os-release 
/etc/debian_version 
/etc/lsb-release 
/etc/redhat-release 
+0

因此,如果我無法從PHP讀取這些文件,那麼對於ubuntu,我需要一個匹配表,然後顯示每個內核版本的最新發行版 – rubo77