Last active
August 19, 2023 15:33
-
-
Save miyurusankalpa/08b7953e1e76476600ed to your computer and use it in GitHub Desktop.
Simple PHP Browser Detection
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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); | |
?> |
I've found your code because I was looking how to detect MS Edge
// 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
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