ऑपरेटिंग सिस्टम की जानकारी प्राप्त करें


99

मैंने हाल ही में http://thismachine.info/ जैसी साइटों के बारे में सोचना शुरू किया, जो उपयोगकर्ता के ऑपरेटिंग सिस्टम की जानकारी प्राप्त करती हैं। मुझे यह पता नहीं चल पाया है कि PHP के साथ ऐसा कैसे करना है, और यह पता लगाने की कोशिश करना चाहता हूं।

मैंने देखा कि वे सूची देते हैं user-agent, जो ब्राउज़र के बारे में बहुत सारी जानकारी देता है। क्या उन्हें ऑपरेटिंग सिस्टम की जानकारी मिलती है, या कुछ और से? क्या कोई एपीआई है जिसका उपयोग मैं उपयोगकर्ता के ऑपरेटिंग सिस्टम को प्राप्त करने के लिए कर सकता हूं?

मैं देखता हूं कि उन्हें ब्राउज़र और आईपी कैसे मिला, लेकिन आपरेटिंग सिस्टम भाग का पता नहीं लगा सके!


जैसा कि अमल मुरली ने नीचे दिए गए अपने उत्तर में कहा था कि echo $_SERVER['HTTP_USER_AGENT'];(कुछ हद तक) उपयोगकर्ता के ऑपरेटिंग सिस्टम को दिखाएगा। मेरे लिए, यह पता चला है Mozilla/5.0 (Windows NT 5.1; rv:22.0) Gecko/20100101 Firefox/22.0, जहां मैं वास्तव में विंडोज एक्सपी का उपयोग कर रहा हूं, इसलिए यह सटीक विज्ञान नहीं है।
फंक फोर्टी निनेर

के रूप में कैसे http://thismachine.info/जानता है कि मैं Windows XP का उपयोग कर रहा हूं? हालांकि मुझे नहीं पता, लेकिन वे एक स्क्रिप्ट का उपयोग कर रहे होंगे जो कि मिल जाएगी और फिर बाद में इसे प्रतिध्वनित करेगी। मेरी जानकारी में, ऐसा कुछ भी नहीं है जो सटीक ऑपरेटिंग सिस्टम को निर्धारित करेगा, जैसा कि मैं देख रहा हूं कि यह प्रतिभूतियों के डोमेन के अंतर्गत आएगा।
फंक फोर्टी निनेर

1
मैंने अपने प्रश्न का उत्तर दिया। यदि आप इस उत्तर को SO stackoverflow.com/a/15497878/1415724 पर देखते हैं, तो आप देखेंगे कि वे कैसे Windows XPसरणी से /windows nt 5.1/i' => 'Windows XP',
गूँजते हैं

@ फ्रेड-आई- क्योंकि विंडोज एक्सपी की आंतरिक संस्करण संख्या 5.1 है। विकिपीडिया आपको सभी विंडोज़ रिलीज़ का आंतरिक संस्करण बताएगा।
स्टेनी

PS: विंडोज विस्टा = 6.0, विंडोज 7 = 6.1, विंडोज 8 = 6.2, विंडोज 8.1 = 6.3, विंडोज 10 = 10.0। पूरी सूची (और भविष्य के विंडोज रिलीज़) के लिए देखें: msdn.microsoft.com/en-us/library/ms724832%28VS.85%29.aspx
StanE

जवाबों:


201

नीचे दिया गया कोड अपने आप में बता सकता है कि कैसे http://thismachine.info/ दिखा रहा है कि कौन सा ऑपरेटिंग सिस्टम इस्तेमाल कर रहा है।

यह क्या करता है, यह आपके मूल ऑपरेटिंग सिस्टम मॉडल को सूँघता है, उदाहरण के लिए windows nt 5.1मेरे स्वयं के रूप में।

इसके बाद ऑपरेटिंग सिस्टम के रूप में विंडोज़ एनटी 5.1 / आई से विंडोज एक्सपी तक जाता है।

का उपयोग कर: '/windows nt 5.1/i' => 'Windows XP',एक सरणी से।

आप अनुमान लगा सकते हैं, या एक अनुमान अभी तक फिर भी बहुत ज्यादा धमाकेदार है।

SO https://stackoverflow.com/a/15497878/ पर उत्तर से उधार लिया गया

<?php

$user_agent = $_SERVER['HTTP_USER_AGENT'];

function getOS() { 

    global $user_agent;

    $os_platform  = "Unknown OS Platform";

    $os_array     = array(
                          '/windows nt 10/i'      =>  'Windows 10',
                          '/windows nt 6.3/i'     =>  'Windows 8.1',
                          '/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;
}

function getBrowser() {

    global $user_agent;

    $browser        = "Unknown Browser";

    $browser_array = array(
                            '/msie/i'      => 'Internet Explorer',
                            '/firefox/i'   => 'Firefox',
                            '/safari/i'    => 'Safari',
                            '/chrome/i'    => 'Chrome',
                            '/edge/i'      => 'Edge',
                            '/opera/i'     => 'Opera',
                            '/netscape/i'  => 'Netscape',
                            '/maxthon/i'   => 'Maxthon',
                            '/konqueror/i' => 'Konqueror',
                            '/mobile/i'    => 'Handheld Browser'
                     );

    foreach ($browser_array as $regex => $value)
        if (preg_match($regex, $user_agent))
            $browser = $value;

    return $browser;
}


$user_os        = getOS();
$user_browser   = getBrowser();

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

print_r($device_details);

echo("<br /><br /><br />".$_SERVER['HTTP_USER_AGENT']."");

?>

फ़ुटनोट्स: (जनवरी 19/14) 18 जनवरी 2014 को एसओ पर एक नए सदस्य YJSoft द्वारा जोड़ने का सुझाव दिया गया था ।/msie|trident/i

टिप्पणी के रूप में पढ़ा:

टिप्पणी करें: क्योंकि msie11 के ua में msie शामिल नहीं है (इसमें त्रिशूल शामिल है)

मैंने इसके लिए थोड़ा शोध किया, और कुछ लिंक पाए जो ट्राइडेंट स्ट्रिंग को समझाते हैं।

हालाँकि संपादन अस्वीकार कर दिया गया था (स्वयं के द्वारा नहीं, बल्कि कुछ अन्य संपादकों द्वारा), यह ऊपर दिए गए लिंक पर पढ़ने लायक है, और आपके उचित निर्णय का उपयोग करने के लिए है।


SUSE का पता लगाने के बारे में पूछे गए एक प्रश्न के अनुसार, निम्न URL पर कोड का यह टुकड़ा मिला है:

अतिरिक्त कोड:

/* return Operating System */
function operating_system_detection(){
    if ( isset( $_SERVER ) ) {
        $agent = $_SERVER['HTTP_USER_AGENT'];
    }
    else {
        global $HTTP_SERVER_VARS;
        if ( isset( $HTTP_SERVER_VARS ) ) {
            $agent = $HTTP_SERVER_VARS['HTTP_USER_AGENT'];
        }
        else {
            global $HTTP_USER_AGENT;
            $agent = $HTTP_USER_AGENT;
        }
    }
    $ros[] = array('Windows XP', 'Windows XP');
    $ros[] = array('Windows NT 5.1|Windows NT5.1)', 'Windows XP');
    $ros[] = array('Windows 2000', 'Windows 2000');
    $ros[] = array('Windows NT 5.0', 'Windows 2000');
    $ros[] = array('Windows NT 4.0|WinNT4.0', 'Windows NT');
    $ros[] = array('Windows NT 5.2', 'Windows Server 2003');
    $ros[] = array('Windows NT 6.0', 'Windows Vista');
    $ros[] = array('Windows NT 7.0', 'Windows 7');
    $ros[] = array('Windows CE', 'Windows CE');
    $ros[] = array('(media center pc).([0-9]{1,2}\.[0-9]{1,2})', 'Windows Media Center');
    $ros[] = array('(win)([0-9]{1,2}\.[0-9x]{1,2})', 'Windows');
    $ros[] = array('(win)([0-9]{2})', 'Windows');
    $ros[] = array('(windows)([0-9x]{2})', 'Windows');
    // Doesn't seem like these are necessary...not totally sure though..
    //$ros[] = array('(winnt)([0-9]{1,2}\.[0-9]{1,2}){0,1}', 'Windows NT');
    //$ros[] = array('(windows nt)(([0-9]{1,2}\.[0-9]{1,2}){0,1})', 'Windows NT'); // fix by bg
    $ros[] = array('Windows ME', 'Windows ME');
    $ros[] = array('Win 9x 4.90', 'Windows ME');
    $ros[] = array('Windows 98|Win98', 'Windows 98');
    $ros[] = array('Windows 95', 'Windows 95');
    $ros[] = array('(windows)([0-9]{1,2}\.[0-9]{1,2})', 'Windows');
    $ros[] = array('win32', 'Windows');
    $ros[] = array('(java)([0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2})', 'Java');
    $ros[] = array('(Solaris)([0-9]{1,2}\.[0-9x]{1,2}){0,1}', 'Solaris');
    $ros[] = array('dos x86', 'DOS');
    $ros[] = array('unix', 'Unix');
    $ros[] = array('Mac OS X', 'Mac OS X');
    $ros[] = array('Mac_PowerPC', 'Macintosh PowerPC');
    $ros[] = array('(mac|Macintosh)', 'Mac OS');
    $ros[] = array('(sunos)([0-9]{1,2}\.[0-9]{1,2}){0,1}', 'SunOS');
    $ros[] = array('(beos)([0-9]{1,2}\.[0-9]{1,2}){0,1}', 'BeOS');
    $ros[] = array('(risc os)([0-9]{1,2}\.[0-9]{1,2})', 'RISC OS');
    $ros[] = array('os/2', 'OS/2');
    $ros[] = array('freebsd', 'FreeBSD');
    $ros[] = array('openbsd', 'OpenBSD');
    $ros[] = array('netbsd', 'NetBSD');
    $ros[] = array('irix', 'IRIX');
    $ros[] = array('plan9', 'Plan9');
    $ros[] = array('osf', 'OSF');
    $ros[] = array('aix', 'AIX');
    $ros[] = array('GNU Hurd', 'GNU Hurd');
    $ros[] = array('(fedora)', 'Linux - Fedora');
    $ros[] = array('(kubuntu)', 'Linux - Kubuntu');
    $ros[] = array('(ubuntu)', 'Linux - Ubuntu');
    $ros[] = array('(debian)', 'Linux - Debian');
    $ros[] = array('(CentOS)', 'Linux - CentOS');
    $ros[] = array('(Mandriva).([0-9]{1,3}(\.[0-9]{1,3})?(\.[0-9]{1,3})?)', 'Linux - Mandriva');
    $ros[] = array('(SUSE).([0-9]{1,3}(\.[0-9]{1,3})?(\.[0-9]{1,3})?)', 'Linux - SUSE');
    $ros[] = array('(Dropline)', 'Linux - Slackware (Dropline GNOME)');
    $ros[] = array('(ASPLinux)', 'Linux - ASPLinux');
    $ros[] = array('(Red Hat)', 'Linux - Red Hat');
    // Loads of Linux machines will be detected as unix.
    // Actually, all of the linux machines I've checked have the 'X11' in the User Agent.
    //$ros[] = array('X11', 'Unix');
    $ros[] = array('(linux)', 'Linux');
    $ros[] = array('(amigaos)([0-9]{1,2}\.[0-9]{1,2})', 'AmigaOS');
    $ros[] = array('amiga-aweb', 'AmigaOS');
    $ros[] = array('amiga', 'Amiga');
    $ros[] = array('AvantGo', 'PalmOS');
    //$ros[] = array('(Linux)([0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,3}(rel\.[0-9]{1,2}){0,1}-([0-9]{1,2}) i([0-9]{1})86){1}', 'Linux');
    //$ros[] = array('(Linux)([0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,3}(rel\.[0-9]{1,2}){0,1} i([0-9]{1}86)){1}', 'Linux');
    //$ros[] = array('(Linux)([0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,3}(rel\.[0-9]{1,2}){0,1})', 'Linux');
    $ros[] = array('[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,3})', 'Linux');
    $ros[] = array('(webtv)/([0-9]{1,2}\.[0-9]{1,2})', 'WebTV');
    $ros[] = array('Dreamcast', 'Dreamcast OS');
    $ros[] = array('GetRight', 'Windows');
    $ros[] = array('go!zilla', 'Windows');
    $ros[] = array('gozilla', 'Windows');
    $ros[] = array('gulliver', 'Windows');
    $ros[] = array('ia archiver', 'Windows');
    $ros[] = array('NetPositive', 'Windows');
    $ros[] = array('mass downloader', 'Windows');
    $ros[] = array('microsoft', 'Windows');
    $ros[] = array('offline explorer', 'Windows');
    $ros[] = array('teleport', 'Windows');
    $ros[] = array('web downloader', 'Windows');
    $ros[] = array('webcapture', 'Windows');
    $ros[] = array('webcollage', 'Windows');
    $ros[] = array('webcopier', 'Windows');
    $ros[] = array('webstripper', 'Windows');
    $ros[] = array('webzip', 'Windows');
    $ros[] = array('wget', 'Windows');
    $ros[] = array('Java', 'Unknown');
    $ros[] = array('flashget', 'Windows');
    // delete next line if the script show not the right OS
    //$ros[] = array('(PHP)/([0-9]{1,2}.[0-9]{1,2})', 'PHP');
    $ros[] = array('MS FrontPage', 'Windows');
    $ros[] = array('(msproxy)/([0-9]{1,2}.[0-9]{1,2})', 'Windows');
    $ros[] = array('(msie)([0-9]{1,2}.[0-9]{1,2})', 'Windows');
    $ros[] = array('libwww-perl', 'Unix');
    $ros[] = array('UP.Browser', 'Windows CE');
    $ros[] = array('NetAnts', 'Windows');
    $file = count ( $ros );
    $os = '';
    for ( $n=0 ; $n<$file ; $n++ ){
        if ( preg_match('/'.$ros[$n][0].'/i' , $agent, $name)){
            $os = @$ros[$n][1].' '.@$name[2];
            break;
        }
    }
    return trim ( $os );
}

संपादित करें: 12 अप्रैल, 2015

मैंने कल एक प्रश्न देखा जो इस प्रश्नोत्तर के लिए प्रासंगिक हो सकता है और कुछ के लिए सहायक हो सकता है। के संबंध में:

Mozilla/5.0 (Linux; Android 4.4.2; SAMSUNG-GT-I9505 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36


एक और संपादन , और एक संदर्भ लिंक जोड़ रहा था, जो (और आज उत्तर दिया / स्वीकार किया गया था, 4/16) जो उपयोग का हो सकता है।

स्टैक पर क्यू एंड ए से परामर्श करें:


3
मुझे यह मिला। '/windows nt 6.3/i'विंडोज 8.1 के लिए है
कामरा

1
मुझे कुछ लिंक मिले, कुछ प्रासंगिक जानकारी के साथ। zytrax.com/tech/web/firefox-history.html gist.github.com/erikng/7140045 hints.macworld.com/article.php?story=20091228114759199 यह ध्यान देने योग्य है कि OS X 10.9 Mavericks में, Safari com.apple का उपयोग करता है प्रॉक्सी ऑटो कॉन्फ़िगरेशन के लिए अनुरोध करने पर उपयोगकर्ता एजेंट के रूप में। नेटवर्किंग। Googling "mavericks HTTP_USER_AGENT"@ben_aaron के बाद
फंक

1
स्यूस निर्धारित करने का कोई तरीका?
चपरासी

1
Chrome ऑपरेटिंग सिस्टम का पता लगाने के लिए इसे जोड़ें:'/cros/i' => 'Chrome OS'
डिस्कनेक्ट किया गया

1
"खराब प्रचार" की तरह, यह अभी भी "प्रचार" है। तो वोट के लिए धन्यवाद :)
फंक फोर्टी निनेर

10

जब आप किसी वेबसाइट पर जाते हैं, तो आपका ब्राउज़र बहुत सारी जानकारी सहित वेब सर्वर को एक अनुरोध भेजता है। यह जानकारी कुछ इस तरह दिख सकती है:

GET /questions/18070154/get-operating-system-info-with-php HTTP/1.1  
Host: stackoverflow.com  
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 
            (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8  
Accept-Language: en-us,en;q=0.5  
Accept-Encoding: gzip,deflate,sdch  
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7  
Keep-Alive: 300  
Connection: keep-alive  
Cookie: <cookie data removed> 
Pragma: no-cache  
Cache-Control: no-cache

इन सूचनाओं का उपयोग वेब सर्वर द्वारा अनुरोध को संभालने के तरीके को निर्धारित करने के लिए किया जाता है; पसंदीदा भाषा और क्या संपीड़न की अनुमति है।

PHP में, यह सारी जानकारी $_SERVERसरणी में संग्रहीत होती है । यह देखने के लिए कि आप वेब सर्वर को क्या भेज रहे हैं, एक नई PHP फ़ाइल बनाएं और सरणी से सब कुछ प्रिंट करें।

<pre><?php print_r($_SERVER); ?></pre>

यह आपको सर्वर पर भेजी जाने वाली हर चीज़ का अच्छा प्रतिनिधित्व देगा, जहाँ से आप वांछित जानकारी निकाल सकते हैं, जैसे $_SERVER['HTTP_USER_AGENT']ऑपरेटिंग सिस्टम और ब्राउज़र प्राप्त करने के लिए।


3
इसे और अधिक पठनीय बनाने के लिए, मैं आमतौर पर "<PRE>" प्रतिध्वनि करता हूं; print_r ($ _ सर्वर); इको "</ PRE>"; यह व्यक्तिगत प्राथमिकता है, लेकिन यह मुझे बड़े सरणियों को पढ़ने में मदद करता है, और यह एक बड़ा सरणी है।
smcjones

3
@smcjones: आप बेहतर काम करेंगे: '<प्री>' को प्रिंट करें। Print_r ($ _ SERVER, true)। '</ pre>'; यह क्लीनर जैसा है :)
कॉर्नेल रायउ

7

Get_browser के लिए php मैनुअल से निम्न कोड लिया ।

$browser = get_browser(null, true);
print_r($browser);

$browserसरणी है platformजानकारी शामिल है जो आप विशिष्ट ऑपरेटिंग सिस्टम उपयोग में देता है।

कृपया उस पृष्ठ में "नोट्स" अनुभाग देखें। यह कुछ हो सकता है (thismachine.info) उपयोग कर रहा है अगर कुछ पहले से ही अन्य जवाब में बताया नहीं है।


6

फ्रेड- II द्वारा दिए गए उत्तर के आधार पर मैं गेटओएस फ़ंक्शन पर अपना हिस्सा साझा करना चाहता था, यह ग्लोबल्स से बचा जाता है, दोनों सूचियों का विलय करता है और वास्तुकला का पता लगाता है (x32 / x64)

/**
 * @param $user_agent null
 * @return string
 */
function getOS($user_agent = null)
{
    if(!isset($user_agent) && isset($_SERVER['HTTP_USER_AGENT'])) {
        $user_agent = $_SERVER['HTTP_USER_AGENT'];
    }

    // /programming/18070154/get-operating-system-info-with-php
    $os_array = [
        'windows nt 10'                              =>  'Windows 10',
        'windows nt 6.3'                             =>  'Windows 8.1',
        'windows nt 6.2'                             =>  'Windows 8',
        'windows nt 6.1|windows nt 7.0'              =>  'Windows 7',
        'windows nt 6.0'                             =>  'Windows Vista',
        'windows nt 5.2'                             =>  'Windows Server 2003/XP x64',
        'windows nt 5.1'                             =>  'Windows XP',
        'windows xp'                                 =>  'Windows XP',
        'windows nt 5.0|windows nt5.1|windows 2000'  =>  'Windows 2000',
        'windows me'                                 =>  'Windows ME',
        'windows nt 4.0|winnt4.0'                    =>  'Windows NT',
        'windows ce'                                 =>  'Windows CE',
        'windows 98|win98'                           =>  'Windows 98',
        'windows 95|win95'                           =>  'Windows 95',
        'win16'                                      =>  'Windows 3.11',
        'mac os x 10.1[^0-9]'                        =>  'Mac OS X Puma',
        'macintosh|mac os x'                         =>  'Mac OS X',
        'mac_powerpc'                                =>  'Mac OS 9',
        'linux'                                      =>  'Linux',
        'ubuntu'                                     =>  'Linux - Ubuntu',
        'iphone'                                     =>  'iPhone',
        'ipod'                                       =>  'iPod',
        'ipad'                                       =>  'iPad',
        'android'                                    =>  'Android',
        'blackberry'                                 =>  'BlackBerry',
        'webos'                                      =>  'Mobile',

        '(media center pc).([0-9]{1,2}\.[0-9]{1,2})'=>'Windows Media Center',
        '(win)([0-9]{1,2}\.[0-9x]{1,2})'=>'Windows',
        '(win)([0-9]{2})'=>'Windows',
        '(windows)([0-9x]{2})'=>'Windows',

        // Doesn't seem like these are necessary...not totally sure though..
        //'(winnt)([0-9]{1,2}\.[0-9]{1,2}){0,1}'=>'Windows NT',
        //'(windows nt)(([0-9]{1,2}\.[0-9]{1,2}){0,1})'=>'Windows NT', // fix by bg

        'Win 9x 4.90'=>'Windows ME',
        '(windows)([0-9]{1,2}\.[0-9]{1,2})'=>'Windows',
        'win32'=>'Windows',
        '(java)([0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2})'=>'Java',
        '(Solaris)([0-9]{1,2}\.[0-9x]{1,2}){0,1}'=>'Solaris',
        'dos x86'=>'DOS',
        'Mac OS X'=>'Mac OS X',
        'Mac_PowerPC'=>'Macintosh PowerPC',
        '(mac|Macintosh)'=>'Mac OS',
        '(sunos)([0-9]{1,2}\.[0-9]{1,2}){0,1}'=>'SunOS',
        '(beos)([0-9]{1,2}\.[0-9]{1,2}){0,1}'=>'BeOS',
        '(risc os)([0-9]{1,2}\.[0-9]{1,2})'=>'RISC OS',
        'unix'=>'Unix',
        'os/2'=>'OS/2',
        'freebsd'=>'FreeBSD',
        'openbsd'=>'OpenBSD',
        'netbsd'=>'NetBSD',
        'irix'=>'IRIX',
        'plan9'=>'Plan9',
        'osf'=>'OSF',
        'aix'=>'AIX',
        'GNU Hurd'=>'GNU Hurd',
        '(fedora)'=>'Linux - Fedora',
        '(kubuntu)'=>'Linux - Kubuntu',
        '(ubuntu)'=>'Linux - Ubuntu',
        '(debian)'=>'Linux - Debian',
        '(CentOS)'=>'Linux - CentOS',
        '(Mandriva).([0-9]{1,3}(\.[0-9]{1,3})?(\.[0-9]{1,3})?)'=>'Linux - Mandriva',
        '(SUSE).([0-9]{1,3}(\.[0-9]{1,3})?(\.[0-9]{1,3})?)'=>'Linux - SUSE',
        '(Dropline)'=>'Linux - Slackware (Dropline GNOME)',
        '(ASPLinux)'=>'Linux - ASPLinux',
        '(Red Hat)'=>'Linux - Red Hat',
        // Loads of Linux machines will be detected as unix.
        // Actually, all of the linux machines I've checked have the 'X11' in the User Agent.
        //'X11'=>'Unix',
        '(linux)'=>'Linux',
        '(amigaos)([0-9]{1,2}\.[0-9]{1,2})'=>'AmigaOS',
        'amiga-aweb'=>'AmigaOS',
        'amiga'=>'Amiga',
        'AvantGo'=>'PalmOS',
        //'(Linux)([0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,3}(rel\.[0-9]{1,2}){0,1}-([0-9]{1,2}) i([0-9]{1})86){1}'=>'Linux',
        //'(Linux)([0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,3}(rel\.[0-9]{1,2}){0,1} i([0-9]{1}86)){1}'=>'Linux',
        //'(Linux)([0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,3}(rel\.[0-9]{1,2}){0,1})'=>'Linux',
        '[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,3})'=>'Linux',
        '(webtv)/([0-9]{1,2}\.[0-9]{1,2})'=>'WebTV',
        'Dreamcast'=>'Dreamcast OS',
        'GetRight'=>'Windows',
        'go!zilla'=>'Windows',
        'gozilla'=>'Windows',
        'gulliver'=>'Windows',
        'ia archiver'=>'Windows',
        'NetPositive'=>'Windows',
        'mass downloader'=>'Windows',
        'microsoft'=>'Windows',
        'offline explorer'=>'Windows',
        'teleport'=>'Windows',
        'web downloader'=>'Windows',
        'webcapture'=>'Windows',
        'webcollage'=>'Windows',
        'webcopier'=>'Windows',
        'webstripper'=>'Windows',
        'webzip'=>'Windows',
        'wget'=>'Windows',
        'Java'=>'Unknown',
        'flashget'=>'Windows',

        // delete next line if the script show not the right OS
        //'(PHP)/([0-9]{1,2}.[0-9]{1,2})'=>'PHP',
        'MS FrontPage'=>'Windows',
        '(msproxy)/([0-9]{1,2}.[0-9]{1,2})'=>'Windows',
        '(msie)([0-9]{1,2}.[0-9]{1,2})'=>'Windows',
        'libwww-perl'=>'Unix',
        'UP.Browser'=>'Windows CE',
        'NetAnts'=>'Windows',
    ];

    // https://github.com/ahmad-sa3d/php-useragent/blob/master/core/user_agent.php
    $arch_regex = '/\b(x86_64|x86-64|Win64|WOW64|x64|ia64|amd64|ppc64|sparc64|IRIX64)\b/ix';
    $arch = preg_match($arch_regex, $user_agent) ? '64' : '32';

    foreach ($os_array as $regex => $value) {
        if (preg_match('{\b('.$regex.')\b}i', $user_agent)) {
            return $value.' x'.$arch;
        }
    }

    return 'Unknown';
}

इस दृष्टिकोण के साथ अंतर्निहित समस्या यह है कि नई प्रौद्योगिकियों को जोड़ने के लिए सूची को बनाए रखा जाना है
टिमो हुओवेनन

6

यदि आप उन सभी जानकारी को प्राप्त करना चाहते हैं, तो आप इसे पढ़ना चाह सकते हैं:
http://php.net/manual/en/function.get-browser.php

आप नमूना कोड चला सकते हैं और आप देखेंगे कि यह कैसे काम करता है:

<?php
echo $_SERVER['HTTP_USER_AGENT'] . "\n\n";

$browser = get_browser(null, true);
print_r($browser);
?>

उपरोक्त उदाहरण कुछ इसी तरह का उत्पादन करेगा:

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3

Array
(
    [browser_name_regex] => ^mozilla/5\.0 (windows; .; windows nt 5\.1; .*rv:.*) gecko/.* firefox/0\.9.*$
    [browser_name_pattern] => Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:*) Gecko/* Firefox/0.9*
    [parent] => Firefox 0.9
    [platform] => WinXP
    [browser] => Firefox
    [version] => 0.9
    [majorver] => 0
    [minorver] => 9
    [cssversion] => 2
    [frames] => 1
    [iframes] => 1
    [tables] => 1
    [cookies] => 1
    [backgroundsounds] =>
    [vbscript] =>
    [javascript] => 1
    [javaapplets] => 1
    [activexcontrols] =>
    [cdf] =>
    [aol] =>
    [beta] => 1
    [win16] =>
    [crawler] =>
    [stripper] =>
    [wap] =>
    [netclr] =>
)

मैं आपके उत्तर में हाइलाइट किए गए सिंटैक्स को ठीक करने की कोशिश कर रहा था, लेकिन आपने संपादन को अस्वीकार कर दिया ...
थॉमस ओरलिटा

मैं जानबूझकर केवल [browser_name_regex] और [browser_name_pattern] को हाइलाइट करना चाहता था अन्यथा आपने कुछ भी गलत नहीं किया है। ठीक है?
ओमनीपोटेंस

1

यदि आप उदाहरण के लिए सामान्य ब्राउज़रों के लिए अपने HTML में एक वर्ग की तरह बहुत कम जानकारी चाहते हैं, तो आप इसका उपयोग कर सकते हैं:

function get_browser()
{
    $browser = '';
    $ua = strtolower($_SERVER['HTTP_USER_AGENT']);
    if (preg_match('~(?:msie ?|trident.+?; ?rv: ?)(\d+)~', $ua, $matches)) $browser = 'ie ie'.$matches[1];
    elseif (preg_match('~(safari|chrome|firefox)~', $ua, $matches)) $browser = $matches[1];

    return $browser;
}

जो 'सफारी' या 'फ़ायरफ़ॉक्स' या 'क्रोम', या 'यानी' यानी ',' यानी '9 ',' यानी '10 ',' यानी '11 'को लौटाएगा।


0

आप इस जानकारी को देख सकते हैं $_SERVER['HTTP_USER_AGENT'], लेकिन इसका प्रारूप फ़्री-फ़ॉर्म है, जिसे भेजे जाने की गारंटी नहीं है, और उपयोगकर्ता द्वारा आसानी से बदला जा सकता है, चाहे गोपनीयता या अन्य कारणों से।

यदि आपने browsecapनिर्देश सेट नहीं किया है , तो यह एक चेतावनी लौटाएगा। यह सुनिश्चित करने के लिए कि यह सेट है, आप इसका उपयोग करके मान प्राप्त कर सकते ini_getहैं और देख सकते हैं कि क्या यह सेट है।

if(ini_get("browscap")) {
    $browser = get_browser(null, true);
    $browser = get_browser($_SERVER['HTTP_USER_AGENT']);  
} 

जैसा कि केबीए ने अपने उत्तर में बताया है, आपका ब्राउज़र वेबपृष्ठ लोड करते समय सर्वर को बहुत सारी जानकारी भेजता है। अधिकांश वेबसाइट आगंतुक के ऑपरेटिंग सिस्टम, ब्राउज़र और विभिन्न सूचनाओं को निर्धारित करने के लिए इन उपयोगकर्ता-एजेंट जानकारी का उपयोग करती हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.