2009-09-26 13 views
45

यूनिक्स/डॉस विशिष्ट स्क्रिप्ट बनाने के लिए मुझे यह जानने की जरूरत है कि मैं किस प्रकार की ऑपरेटिंग सिस्टम हूं।ओएस कैसे प्राप्त करें जिस पर PHP चल रहा है?

मुझे यह जानकारी कैसे प्राप्त हो सकती है?
phpinfo(); मुझे बहुत कुछ बताता है और यह स्पष्ट नहीं करता कि मैं यूनिक्स पर चल रहा हूं या नहीं।

उत्तर

86

पीएचपी कई 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

27

बस ध्यान रखें कि PHP_OS वास्तव में उस मंच पर है जिस पर PHP बनाया गया था। यह वही मंच नहीं हो सकता है जिस पर इसे तैनात किया गया है। इसलिए php_uname('s') अधिक विश्वसनीय है।

+0

'विंडोज 7 पर' php_uname ('s') 'विंडोज एनटी" रिटर्न "विंडोज एनटी" तो मुझे नहीं पता कि यह कितना अधिक विश्वसनीय है :) मुझे लगता है कि कोई तर्क दे सकता है कि विन 7 एनटी पर आधारित है लेकिन अभी भी ... –

+7

विंडोज 7 बिल्कुल विंडोज एनटी (संस्करण 6.1) है। विस्टा विंडोज एनटी 6 था, एक्सपी एनटी 5.1 था, 2000 एनटी 5 था। तो हाँ यह विश्वसनीय है! संदर्भ के लिए [यहां] (http://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions) देखें। अपने विन ओएस के संस्करण संख्या को देखने के लिए एक cmd प्रॉम्प्ट पर 'ver' टाइप करें। – spikyjt

+1

यह मेरे लिए सही उत्तर जैसा लगता है। स्वीकृत उत्तर फ्लैट-आउट गलत है और ओपीएस प्रश्न का उत्तर नहीं देता है। –

2

प्लेटफ़ॉर्म की जांच करने के 2 अलग-अलग तरीके हैं जिन पर आपका PHP चल रहा है।

  1. PHP_OS जो एक स्थिरांक है और 'ऑपरेटिंग सिस्टम का नाम' है कि अपने PHP यह में बनाया गया था की ओर इशारा करेगा का उपयोग करना।
  2. समारोह 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

पीएचपी वितरण के नाम पर प्राप्त करने के लिए किसी भी समारोह प्रदान नहीं करता, लिनक्स कमांड uname के समान है, तो इसका मतलब यह वितरण खुद के बारे में कोई जानकारी उपलब्ध नहीं कराता।

न तो और न ही PHP_OS जानकारी दें। वितरण के बारे में लेकिन ओएस प्रकार (जैसे लिनक्स/विंडोज)।

मुझे लगता है कि /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 
) 

आयोजित ओग Lykke [1]; -)

[1] डेनिश वाक्यांश का मतलब शुभकामनाएं है।

3

पीएचपी 7.2.0 के रूप में हम ऑपरेटिंग सिस्टम परिवार अर्थात PHP_OS_FAMILY प्राप्त करने के लिए एक नया पूर्वनिर्धारित लगातार की है। यह स्ट्रिंग 'विंडोज', 'बीएसडी', 'ओएसएक्स', 'सोलारिस', 'लिनक्स' या 'अज्ञात' में से कोई भी लौटाता है।

संबंधित मुद्दे