Get users OS and version number
Asked Answered
W

5

9

I've spent a day on and off Googeling for this; no luck so far.

How can I get the users OS and version. Mine would me Mac OS X 10.6.4, the spare PC in the office would be Windows XP SP3. You see what I'm getting at.

I've seen a million and one methods to get the users platform alone, just not the version.

JS would be ideal, but a server-side (PHP) solution is OK too.

Winfordwinfred answered 9/8, 2010 at 16:1 Comment(1)
Just remember, never trust anything from the client. So even if you "detected" OS X 10.6.4, you have no idea if that's right...Semitrailer
E
25
<?php

$user_agent     =   $_SERVER['HTTP_USER_AGENT'];

function getOS() { 

global $user_agent;

$os_platform    =   "Unknown OS Platform";

$os_array       =   array(
    '/windows nt 10.0/i'    =>  'Windows 10',
    '/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',
    '/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']."");

?>
Engleman answered 19/3, 2013 at 11:12 Comment(3)
Browser would fail for Chrome, no? Chrome has both 'Safari' and 'Chrome' on it's user agent. E.g: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1625.2 Safari/537.36Tectonic
@Engleman This script really helped me. One question about it: I use OS X Mavericks and it returns "Unknown OS platform". Any idea why and how I can fix that?Adalia
I know this answer is 7 years old but wouldn't it be better if you accepted the user agent as a function variable instead of specifying it as a global, then it could return it for any user agent. Either that or just use the $_SERVER variable inside the function as it's already a global variable?Eusebioeusebius
S
5

You can use the HTTP_USER_AGENT field in the $_SERVER array. For example, the following code will detect iPhone and Android users and redirect them to a different location (e.g., the iTunes App Store or Android Marketplace):

$http_user_agent = $_SERVER['HTTP_USER_AGENT'];

if (stristr($http_user_agent, "android") != FALSE) {
  header("Location: " . ANDROID_REDIRECT);
}
else if (stristr($http_user_agent, "iphone") != FALSE) {
  header("Location: " . IOS_REDIRECT);
}
else {
  header("Location: " . DEFAULT_REDIRECT);
}

Note that ANDROID_REDIRECT, IOS_REDIRECT, and DEFAULT_REDIRECT are constants defined with the PHP 'define' function.

Selfesteem answered 9/12, 2011 at 7:36 Comment(0)
V
2

check out get_browser function in http://php.net/manual/en/function.get-browser.php

Variant answered 9/8, 2010 at 17:5 Comment(1)
Unfortunately, the browscap.ini file on our server (both dedicated boxes actually) isn't new enough. =/Winfordwinfred
F
1

All of the server side solutions that you will see will really boil down to using the User-Agent string in the request.

Doing the work on the client side (JS) has the benefit of being able to interact directly with the browser/OS. For example, jQuery's browser function - which might be exactly what you need - runs a series of tests on the DOM/browser to see how it reacts, and then determines the browser type and version based on those reactions. There have been some projects to extend jQuery's browser function to include OS detection, but I have not used them before; easily found with a quick Google search.

Cheers.

Fabulist answered 9/8, 2010 at 16:9 Comment(0)
G
1

the only hint you have, other than doing a network probe, which isn't too reliable anyway, is to examine the User-Agent header, but you cannot rely on it too much, either, as anyone can modify the default headers that his browser sends.

Gerard answered 9/8, 2010 at 16:11 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.