[ACCEPTED]-PHP: get the browser name-php
if (strpos($_SERVER['HTTP_USER_AGENT'], '(compatible; MSIE ')!==FALSE) {
...ie specific...
}
But! Don't!
There is rarely a good reason to be 24 sniffing user-agent at the server side. It 23 brings a bunch of problems, including:
browsers 22 and other user-agents that lie about who 21 they are, or strip the user-agent header 20 completely, or generally make it hard to 19 distinguish what the real browser is from 18 the header text. For example the above rule 17 will also detect Opera when it's spoofing 16 IE, and IEMobile (Windows Mobile), which 15 you may or may not want as it is a very 14 different browser to desktop IE.
if you discriminate 13 on the user-agent at the server-side, you 12 must return a
Vary: User-Agent
header in the response, otherwise 11 proxies may cache a version of the page 10 and return it to other browsers that don't 9 match. However, including this header has 8 the side-effect of messing up caching in 7 IE.
Depending on what it is you are trying 6 to achieve, there is almost always a much 5 better way of handling the differences between 4 IE and other browsers at the client side, using 3 CSS hacks, JScript or conditional comments. What is the real 2 purpose for trying to detect IE in your 1 case?
Try this code...
<?php
function getBrowser()
{
$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|win32/i', $u_agent)) {
$platform = 'windows';
}
// 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('/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
);
}
// now try it
$ua=getBrowser();
$yourbrowser= "Your browser: " . $ua['name'];
echo $yourbrowser;
?>
Output of Firefox
Mozilla Firefox
0
<?php
var_dump($_SERVER['HTTP_USER_AGENT']);
var_dump(get_browser(null, true));
?>
Prints:
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] =>
)
0
$_SERVER['HTTP_USER_AGENT']
0
1) Accurate detector: BrowserDetection.php (Examples)
2) primitive function 1 :
function get_user_browser()
{
$u_agent = $_SERVER['HTTP_USER_AGENT']; $ub = '';
if(preg_match('/MSIE/i',$u_agent)) { $ub = "ie"; }
elseif(preg_match('/Firefox/i',$u_agent)) { $ub = "firefox"; }
elseif(preg_match('/Safari/i',$u_agent)) { $ub = "safari"; }
elseif(preg_match('/Chrome/i',$u_agent)) { $ub = "chrome"; }
elseif(preg_match('/Flock/i',$u_agent)) { $ub = "flock"; }
elseif(preg_match('/Opera/i',$u_agent)) { $ub = "opera"; }
return $ub;
}
More Related questions
We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.