Skip to content

Instantly share code, notes, and snippets.

@miyurusankalpa
Last active August 19, 2023 15:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save miyurusankalpa/08b7953e1e76476600ed to your computer and use it in GitHub Desktop.
Save miyurusankalpa/08b7953e1e76476600ed to your computer and use it in GitHub Desktop.
Simple PHP Browser Detection
<?php
/* Forked from : http://php.net/manual/en/function.get-browser.php#101125
Version : 0.7 (Beta)
Author : Miyuru Sankalpa
New: Added Windows 10 detection and 64 bit detection
V0.6 : Added Support for MS Edge */
function getBrowser($u_agent)
{
//$u_agent = $_SERVER['HTTP_USER_AGENT'];
$bname = 'Unknown';
$platform = 'Unknown';
$version= "";
//First get the platform?
if(preg_match('/linux/i', $u_agent)) {
$platform = 'Linux';
}
elseif(preg_match('/macintosh|mac os x/i', $u_agent)) {
$platform = 'Mac';
}
elseif(preg_match('/Windows NT 10.0/i', $u_agent)) {
$platform = 'Windows 10';
}
elseif(preg_match('/windows|win32/i', $u_agent)) {
$platform = 'Windows';
}
//should I add support for 128 bit?? :D
if(preg_match('/WOW64/i', $u_agent)) {
$bit = '64';
}
else {
$bit = '32';
}
// Next get the name of the useragent yes seperately and for good reason
if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent))
{
$bname = 'Internet Explorer';
$ub = "MSIE";
}
elseif(preg_match('/Edge/i',$u_agent))
{
$bname = 'Microsoft Edge';
$ub = "Edge";
}
elseif(preg_match('/Firefox/i',$u_agent))
{
$bname = 'Mozilla Firefox';
$ub = "Firefox";
}
elseif(preg_match('/Chrome/i',$u_agent))
{
$bname = 'Google Chrome';
$ub = "Chrome";
}
elseif(preg_match('/Safari/i',$u_agent))
{
$bname = 'Apple Safari';
$ub = "Safari";
}
elseif(preg_match('/Opera/i',$u_agent))
{
$bname = 'Opera';
$ub = "Opera";
}
elseif(preg_match('/Netscape/i',$u_agent))
{
$bname = 'Netscape';
$ub = "Netscape";
}
// finally get the correct version number
$known = array('Version', $ub, 'other');
$pattern = '#(?<browser>' . join('|', $known) .
')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
if (!preg_match_all($pattern, $u_agent, $matches)) {
// we have no matching number just continue
}
// see how many we have
$i = count($matches['browser']);
if ($i != 1) {
//we will have two since we are not using 'other' argument yet
//see if version is before or after the name
if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){
$version= $matches['version'][0];
}
else {
$version= $matches['version'][1];
}
}
else {
$version= $matches['version'][0];
}
// check if we have a number
if ($version==null || $version=="") {$version="?";}
return array(
'userAgent' => $u_agent,
'name' => $bname,
'version' => $version,
'platform' => $platform,
'pattern' => $pattern,
'bit' => $bit
);
}
// now try it
$ua=getBrowser();
$yourbrowser= "Your browser: " . $ua['name'] . " " . $ua['version'] . " on " .$ua['platform'] . " (" .$ua['bit']. " Bit) reports: <br >" . $ua['userAgent'];
print_r($yourbrowser);
?>
@annelyse
Copy link

Thanks a lot !
This code doesn't detect IE 11,
you could add a test : elseif(preg_match('/Trident/i',$u_agent))

@Witold1983
Copy link

Keep up the good work.
On my linux your script reports wrongly 32bit while I've 64bit:

Your browser: Mozilla Firefox 116.0 on Linux (32 Bit) reports:
Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/116.0

@Witold1983
Copy link

I've found your code because I was looking how to detect MS Edge

@Witold1983
Copy link

// Detecting Linux Architecture
// Line 30 --> 35:

if(preg_match('/WOW64/i', $u_agent)) {
    $bit = '64';
}
elseif(preg_match('/X\d+_64/i', $u_agent)) {
    $bit = '64';
}  
else {
    $bit = '32';
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment