অপারেটিং সিস্টেমের তথ্য পান


100

আমি সম্প্রতি http://thismachine.info/ এর মতো সাইটগুলি সম্পর্কে ভাবতে শুরু করেছি যা ব্যবহারকারীর অপারেটিং সিস্টেমের তথ্য পেতে পারে। আমি পিএইচপি দিয়ে এটি কীভাবে করব তা সন্ধান করতে সক্ষম হয়েছি এবং এটি বের করার চেষ্টা করতে চেয়েছিলাম।

আমি লক্ষ্য করেছি যে তারা তালিকাবদ্ধ করে 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/আমি কীভাবে জানব যে আমি উইন্ডোজ এক্সপি ব্যবহার করছি? আমি জানি না, তবে তারা অবশ্যই এমন একটি স্ক্রিপ্ট ব্যবহার করছে যা এটি খুঁজে পেতে এবং প্রতিস্থাপন করবে এবং এরপরে এটি প্রতিধ্বনিত করবে। আমার জ্ঞানের মতে, এমন কিছুই নেই যা সঠিক অপারেটিং সিস্টেমটি নির্ধারণ করবে, কারণ আমি দেখছি এটি সিকিওরিটি ডোমেনের আওতায় পড়বে।
ফানকি চল্লিশ নিনার

4
আমি আমার নিজের প্রশ্নের উত্তর। আপনি যদি এই উত্তরটি এসও স্ট্যাকওভারফ্লো.com/a/15497878/1415724 এ যান তবে আপনি খেয়াল করবেন যে তারা কীভাবে Windows XPঅ্যারে থেকে প্রতিধ্বনিত হয়/windows nt 5.1/i' => 'Windows XP',
ফান্ক ফোর্ট্টি নাইনার

4
@ ফ্রেড-আইআই- কারণ উইন্ডোজ এক্সপির অভ্যন্তরীণ সংস্করণ সংখ্যা 5.1। উইকিপিডিয়া আপনাকে উইন্ডোজ সমস্ত রিলিজের অভ্যন্তরীণ সংস্করণ জানাবে।
StanE

4
পিএস: উইন্ডোজ ভিস্তা = 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

উত্তর:


206

নীচের কোডটি তার নিজস্বভাবে ব্যাখ্যা করতে পারে, http://thismachine.info/ কীভাবে কোনও অপারেটিং সিস্টেম ব্যবহার করছে তা দেখাতে সক্ষম।

এটি কী করে তা হ'ল এটি আপনার মূল অপারেটিং সিস্টেমের মডেলটিকে স্নিগ্ধ করে windows nt 5.1 আমার নিজের।

এরপরে এটি অপারেটিং সিস্টেম হিসাবে উইন্ডোজ এনটি 5.1 / i উইন্ডোজ এক্সপিতে পাস করে।

ব্যবহার: '/windows nt 5.1/i' => 'Windows XP', একটি অ্যারে থেকে।

আপনি অনুমানমূলক কাজ বা একটি আনুমানিকতা বলতে পারেন তবুও বেশ প্রশংসনীয়।

এসও 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 এ একটি প্রস্তাবিত সম্পাদনা হয়েছিল/msie|trident/i নতুন সদস্য ।

মন্তব্যটি পড়ুন:

মন্তব্য: কারণ এমএসি 11 এর ইউএ তে এমএসির অন্তর্ভুক্ত নেই (এটি পরিবর্তে ত্রিশূল অন্তর্ভুক্ত)

আমি এটির জন্য কিছুটা গবেষণা করেছি এবং ট্রাইডেন্ট স্ট্রিংয়ের ব্যাখ্যা দেওয়ার জন্য কয়েকটি লিঙ্ক পেয়েছি।

যদিও সম্পাদনাটি প্রত্যাখ্যান করা হয়েছিল (নিজে দ্বারা নয়, তবে অন্যান্য সম্পাদকদের মধ্যে কিছু দ্বারা), এটি উপরের লিঙ্কগুলিতে পড়া এবং আপনার যথাযথ রায় ব্যবহার করা উপযুক্ত।


SUSE সনাক্তকরণ সম্পর্কে জিজ্ঞাসা করা প্রশ্ন অনুসারে, নিম্নলিখিত ইউআরএলে এই কোডের এই অংশটি খুঁজে পেয়েছেন:

অতিরিক্ত কোড:

/* 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 নভেম্বর) ব্যবহৃত হতে পারে of

স্ট্যাকের জন্য এখানে প্রশ্নোত্তর থেকে পরামর্শ করুন:


4
আমি এটি খুঁজে পেয়েছি। '/windows nt 6.3/i'উইন্ডোজ 8.1 এর জন্য
হামেদ কামরাভা

4
আমি কয়েকটি লিঙ্ক পেয়েছি, কিছু প্রাসঙ্গিক তথ্যের সাথে। zytrax.com/tech/web/firefox-history.html gist.github.com/erikng/7140045 hints.macworld.com/article.php?story=20091228114759199 এটি লক্ষণীয় যে ওএস এক্স ১০.৯ মাভারিক্সে, সাফারি com.apple ব্যবহার করে .উইবকিট. প্রক্সি অটো কনফিগারেশনের জন্য অনুরোধ করার সময় ব্যবহারকারী এজেন্ট হিসাবে নেটওয়ার্কিং। এটি "mavericks HTTP_USER_AGENT"গুগলিংয়ের পরে @ বেএন_আরন
নাইনার

4
মামলা করার কোনও উপায়?
পিওন

4
ক্রোম অপারেটিং সিস্টেমগুলি সনাক্ত করতে এটি যুক্ত করুন:'/cros/i' => 'Chrome OS'
সংযোগ বিচ্ছিন্ন হয়েছে

4
"খারাপ প্রচার" এর মতো এটি এখনও "প্রচার"। ভোটের জন্য ধন্যবাদ :)
ফান্টি ফোর্ট্টি নাইনার

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

এই তথ্যগুলি সমস্ত ওয়েব সার্ভারের মাধ্যমে কীভাবে অনুরোধটি পরিচালনা করতে হবে তা নির্ধারণ করতে ব্যবহৃত হয়; পছন্দসই ভাষা এবং সংক্ষেপণ অনুমোদিত কিনা whether

পিএইচপি-তে, এই সমস্ত তথ্য $_SERVERঅ্যারেতে সংরক্ষণ করা হয় । আপনি ওয়েব সার্ভারে কী পাঠাচ্ছেন তা দেখতে একটি নতুন পিএইচপি ফাইল তৈরি করুন এবং অ্যারে থেকে সমস্ত কিছু মুদ্রণ করুন।

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

এটি আপনাকে সার্ভারে পাঠানো হচ্ছে এমন সমস্ত কিছুর একটি সুন্দর প্রতিনিধিত্ব দেবে, যেখানে আপনি পছন্দসই তথ্য বের করতে পারবেন, যেমন $_SERVER['HTTP_USER_AGENT']অপারেটিং সিস্টেম এবং ব্রাউজারটি পেতে।


4
এটিকে আরও পঠনযোগ্য করার জন্য, আমি সাধারণত "<PRE>" প্রতিধ্বনি করি; মুদ্রণ_আর (S _ সার্ভার); প্রতিধ্বনি "</ p>>"; এটি ব্যক্তিগত পছন্দ তবে এটি আমাকে বড় অ্যারে পড়তে সহায়তা করে এবং এটি একটি বড় অ্যারে।
smcjones

4
@ এসএমসি জোনস: আপনি আরও ভাল করতে চাইছেন: প্রতিধ্বনি '<pre>' .প্রিন্ট_আর (S _ সার্ভার, সত্য) '</ translation>'; এটি এর মত পরিষ্কার
কর্নেল রাইউ

7

Get_browser এর জন্য পিএইচপি ম্যানুয়াল থেকে নিম্নলিখিত কোডটি নিয়েছে

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

$browserঅ্যারে করেছে platformতথ্য অন্তর্ভুক্ত যা আপনি নির্দিষ্ট অপারেটিং সিস্টেম ব্যবহারে দেয়।

দয়া করে নিশ্চিত করুন যে পৃষ্ঠায় "নোটস" বিভাগটি দেখুন। এটি ইতিমধ্যে অন্য জবাবগুলিতে নির্দেশিত না হলে কিছু (thismachine.info) ব্যবহার করছে।


6

উপর ভিত্তি করে উত্তর দ্বারা ফ্রেড দ্বিতীয় আমি getOS ফাংশন আমার নিন শেয়ার করতে চেয়েছিলেন, এটা globals এড়াতে, উভয় তালিকা মার্জ ও স্থাপত্য সনাক্ত করে (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';
}

এই পদ্ধতির অন্তর্নিহিত সমস্যাটি হ'ল তালিকাকে নতুন প্রযুক্তি যুক্ত করার জন্য বজায় রাখতে হবে
টিমো হুভিনেন

সম্পাদনা করার চেষ্টা করেছেন, তবে এটি আমাকে একটি একক চরিত্র পরিবর্তন করতে দেবে না, তাই: '[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,3})' => 'Linux',হওয়া উচিত'[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,3}' => 'Linux',
MonOve

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] =>
)

আমি আপনার উত্তরে সিনট্যাক্স হাইলাইট ঠিক করার চেষ্টা করছিলাম তবে আপনি সম্পাদনাটি প্রত্যাখ্যান করেছেন ...
টমাস অরলিতা

আমি উদ্দেশ্যমূলকভাবে কেবল [ব্রাউজার_নাম_রেজেক্স] এবং [ব্রাউজার_নাম_প্যাটার্ন] হাইলাইট করতে চেয়েছিলাম অন্যথায় আপনি কোনও ভুল করেন নি। ঠিক আছে?
ওমনিপটেনস

1

উদাহরণস্বরূপ আপনি যদি সাধারণ এই ব্রাউজারগুলির জন্য আপনার এইচটিএমটিএলে একটি শ্রেণির মতো খুব কম তথ্য চান তবে আপনি এটি ব্যবহার করতে পারেন:

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

যা 'সাফারি' বা 'ফায়ারফক্স' বা 'ক্রোম', বা 'অর্থাৎ আই 8', 'অর্থাত্ আই 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']);  
} 

যেমন কেবিএ তার উত্তরে ব্যাখ্যা করেছে, ওয়েবপৃষ্ঠাটি লোড করার সময় আপনার ব্রাউজারটি সার্ভারে প্রচুর তথ্য প্রেরণ করে। বেশিরভাগ ওয়েবসাইটগুলি এই ব্যবহারকারী-এজেন্ট তথ্য দর্শনার্থীর অপারেটিং সিস্টেম, ব্রাউজার এবং বিভিন্ন তথ্য নির্ধারণ করতে ব্যবহার করে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.