How to get exact browser name and version?

PhpJavascriptJqueryBrowser

Php Problem Overview


I have tried some solutions but I am unable to get exact name and version:

I am trying following code:

$browserAgent = $_SERVER['HTTP_USER_AGENT'];
echo $browserAgent;

Output of above code:

Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.68 Safari/534.24

But I am using:

Google Chrome 11.0.696.68
on   
Ubuntu 10.04

So I can find in Chrome/11.0.696.68 in output string but it is also showing some other browsers names that is confusing to extract exact browser name/version from string.

Php Solutions


Solution 1 - Php

Use get_browser()

From Manual:

echo $_SERVER['HTTP_USER_AGENT'] . "\n\n";

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

Will return:

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

Solution 2 - Php

this JavaScript give you the browser name and the version,

var browser = '';
var browserVersion = 0;

if (/Opera[\/\s](\d+\.\d+)/.test(navigator.userAgent)) {
    browser = 'Opera';
} else if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
    browser = 'MSIE';
} else if (/Navigator[\/\s](\d+\.\d+)/.test(navigator.userAgent)) {
    browser = 'Netscape';
} else if (/Chrome[\/\s](\d+\.\d+)/.test(navigator.userAgent)) {
    browser = 'Chrome';
} else if (/Safari[\/\s](\d+\.\d+)/.test(navigator.userAgent)) {
    browser = 'Safari';
    /Version[\/\s](\d+\.\d+)/.test(navigator.userAgent);
    browserVersion = new Number(RegExp.$1);
} else if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)) {
    browser = 'Firefox';
}
if(browserVersion === 0){
    browserVersion = parseFloat(new Number(RegExp.$1));
}
alert(browser + "*" + browserVersion);

Solution 3 - Php

Got an awesome function here.

<?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('/OPR/i',$u_agent)){
    $bname = 'Opera';
    $ub = "Opera";
  }elseif(preg_match('/Chrome/i',$u_agent) && !preg_match('/Edge/i',$u_agent)){
    $bname = 'Google Chrome';
    $ub = "Chrome";
  }elseif(preg_match('/Safari/i',$u_agent) && !preg_match('/Edge/i',$u_agent)){
    $bname = 'Apple Safari';
    $ub = "Safari";
  }elseif(preg_match('/Netscape/i',$u_agent)){
    $bname = 'Netscape';
    $ub = "Netscape";
  }elseif(preg_match('/Edge/i',$u_agent)){
    $bname = 'Edge';
    $ub = "Edge";
  }elseif(preg_match('/Trident/i',$u_agent)){
    $bname = 'Internet Explorer';
    $ub = "MSIE";
  }

  // 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'] . " " . $ua['version'] . " on " .$ua['platform'] . " reports: <br >" . $ua['userAgent'];
print_r($yourbrowser);
?>

Solution 4 - Php

I would like to suggest you this amazing class. This worked very well for me.

http://chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php.html/

I am publishing the code I used with the copyright notice of original author. You can get latest code from the link above.

<?php
/**
 * File: Browser.php
 * Author: Chris Schuld (http://chrisschuld.com/)
 *
 * Copyright (C) 2008-2010 Chris Schuld  (chris@chrisschuld.com)
 *
 * Typical Usage:
 *
 *   $browser = new Browser();
 *   if( $browser->getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >= 2 ) {
 *   	echo 'You have FireFox version 2 or greater';
 *   }
 *
*/

class Browser {
	private $_agent = '';
	private $_browser_name = '';
	private $_version = '';
	private $_platform = '';
	private $_os = '';
	private $_is_aol = false;
	private $_is_mobile = false;
	private $_is_robot = false;
	private $_aol_version = '';

	const BROWSER_UNKNOWN = 'unknown';
	const VERSION_UNKNOWN = 'unknown';

	const BROWSER_OPERA = 'Opera'; 
	const BROWSER_OPERA_MINI = 'Opera Mini';
	const BROWSER_WEBTV = 'WebTV';
	const BROWSER_IE = 'Internet Explorer'; 
	const BROWSER_POCKET_IE = 'Pocket Internet Explorer';
	const BROWSER_KONQUEROR = 'Konqueror';
	const BROWSER_ICAB = 'iCab';
	const BROWSER_OMNIWEB = 'OmniWeb';
	const BROWSER_FIREBIRD = 'Firebird';
	const BROWSER_FIREFOX = 'Firefox';
	const BROWSER_ICEWEASEL = 'Iceweasel';
	const BROWSER_SHIRETOKO = 'Shiretoko';
	const BROWSER_MOZILLA = 'Mozilla';
	const BROWSER_AMAYA = 'Amaya';
	const BROWSER_LYNX = 'Lynx';
	const BROWSER_SAFARI = 'Safari';
	const BROWSER_IPHONE = 'iPhone';
	const BROWSER_IPOD = 'iPod';
	const BROWSER_IPAD = 'iPad';
	const BROWSER_CHROME = 'Chrome';
	const BROWSER_ANDROID = 'Android';
	const BROWSER_GOOGLEBOT = 'GoogleBot';
	const BROWSER_SLURP = 'Yahoo! Slurp';
	const BROWSER_W3CVALIDATOR = 'W3C Validator';
	const BROWSER_BLACKBERRY = 'BlackBerry';
	const BROWSER_ICECAT = 'IceCat';
	const BROWSER_NOKIA_S60 = 'Nokia S60 OSS Browser';
	const BROWSER_NOKIA = 'Nokia Browser';
	const BROWSER_MSN = 'MSN Browser';
	const BROWSER_MSNBOT = 'MSN Bot';
	
	const BROWSER_NETSCAPE_NAVIGATOR = 'Netscape Navigator';
	const BROWSER_GALEON = 'Galeon';
	const BROWSER_NETPOSITIVE = 'NetPositive';
	const BROWSER_PHOENIX = 'Phoenix';

	const PLATFORM_UNKNOWN = 'unknown';
	const PLATFORM_WINDOWS = 'Windows';
	const PLATFORM_WINDOWS_CE = 'Windows CE';
	const PLATFORM_APPLE = 'Apple';
	const PLATFORM_LINUX = 'Linux';
	const PLATFORM_OS2 = 'OS/2';
	const PLATFORM_BEOS = 'BeOS';
	const PLATFORM_IPHONE = 'iPhone';
	const PLATFORM_IPOD = 'iPod';
	const PLATFORM_IPAD = 'iPad';
	const PLATFORM_BLACKBERRY = 'BlackBerry';
	const PLATFORM_NOKIA = 'Nokia';
	const PLATFORM_FREEBSD = 'FreeBSD';
	const PLATFORM_OPENBSD = 'OpenBSD';
	const PLATFORM_NETBSD = 'NetBSD';
	const PLATFORM_SUNOS = 'SunOS';
	const PLATFORM_OPENSOLARIS = 'OpenSolaris';
	const PLATFORM_ANDROID = 'Android';
	
	const OPERATING_SYSTEM_UNKNOWN = 'unknown';

	public function Browser($useragent="") {
		$this->reset();
		if( $useragent != "" ) {
			$this->setUserAgent($useragent);
		}
		else {
			$this->determine();
		}
	}

	/**
	* Reset all properties
	*/
	public function reset() {
		$this->_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : "";
		$this->_browser_name = self::BROWSER_UNKNOWN;
		$this->_version = self::VERSION_UNKNOWN;
		$this->_platform = self::PLATFORM_UNKNOWN;
		$this->_os = self::OPERATING_SYSTEM_UNKNOWN;
		$this->_is_aol = false;
		$this->_is_mobile = false;
		$this->_is_robot = false;
		$this->_aol_version = self::VERSION_UNKNOWN;
	}

	/**
	* Check to see if the specific browser is valid
	* @param string $browserName
	* @return boolean
	*/
	function isBrowser($browserName) { return( 0 == strcasecmp($this->_browser_name, trim($browserName))); }

	/**
	* The name of the browser.  All return types are from the class contants
	* @return string Name of the browser
	*/
	public function getBrowser() { return $this->_browser_name; }
	/**
	* Set the name of the browser
	* @param $browser The name of the Browser
	*/
	public function setBrowser($browser) { return $this->_browser_name = $browser; }
	/**
	* The name of the platform.  All return types are from the class contants
	* @return string Name of the browser
	*/
	public function getPlatform() { return $this->_platform; }
	/**
	* Set the name of the platform
	* @param $platform The name of the Platform
	*/
	public function setPlatform($platform) { return $this->_platform = $platform; }
	/**
	* The version of the browser.
	* @return string Version of the browser (will only contain alpha-numeric characters and a period)
	*/
	public function getVersion() { return $this->_version; }
	/**
	* Set the version of the browser
	* @param $version The version of the Browser
	*/
	public function setVersion($version) { $this->_version = preg_replace('/[^0-9,.,a-z,A-Z-]/','',$version); }
	/**
	* The version of AOL.
	* @return string Version of AOL (will only contain alpha-numeric characters and a period)
	*/
	public function getAolVersion() { return $this->_aol_version; }
	/**
	* Set the version of AOL
	* @param $version The version of AOL
	*/
	public function setAolVersion($version) { $this->_aol_version = preg_replace('/[^0-9,.,a-z,A-Z]/','',$version); }
	/**
	* Is the browser from AOL?
	* @return boolean
	*/
	public function isAol() { return $this->_is_aol; }
	/**
	* Is the browser from a mobile device?
	* @return boolean
	*/
	public function isMobile() { return $this->_is_mobile; }
	/**
	* Is the browser from a robot (ex Slurp,GoogleBot)?
	* @return boolean
	*/
	public function isRobot() { return $this->_is_robot; }
	/**
	* Set the browser to be from AOL
	* @param $isAol
	*/
	public function setAol($isAol) { $this->_is_aol = $isAol; }
	/**
	 * Set the Browser to be mobile
	 * @param boolean
	 */
	protected function setMobile($value=true) { $this->_is_mobile = $value; }
	/**
	 * Set the Browser to be a robot
	 * @param boolean
	 */
	protected function setRobot($value=true) { $this->_is_robot = $value; }
	/**
	* Get the user agent value in use to determine the browser
	* @return string The user agent from the HTTP header
	*/
	public function getUserAgent() { return $this->_agent; }
	/**
	* Set the user agent value (the construction will use the HTTP header value - this will overwrite it)
	* @param $agent_string The value for the User Agent
	*/
	public function setUserAgent($agent_string) {
		$this->reset();
		$this->_agent = $agent_string;
		$this->determine();
	}
	/**
	 * Used to determine if the browser is actually "chromeframe"
	 * @return boolean
	 */
	public function isChromeFrame() {
		return( strpos($this->_agent,"chromeframe") !== false );
	}
	/**
	* Returns a formatted string with a summary of the details of the browser.
	* @return string formatted string with a summary of the browser
	*/
	public function __toString() {
		return "<strong>Browser Name:</strong>{$this->getBrowser()}<br/>\n" .
		       "<strong>Browser Version:</strong>{$this->getVersion()}<br/>\n" .
		       "<strong>Browser User Agent String:</strong>{$this->getUserAgent()}<br/>\n" .
		       "<strong>Platform:</strong>{$this->getPlatform()}<br/>";
	}
	/**
	 * Protected routine to calculate and determine what the browser is in use (including platform)
	 */
	protected function determine() {
		$this->checkPlatform();
		$this->checkBrowsers();
		$this->checkForAol();
	}
	/**
	 * Protected routine to determine the browser type
	 * @return boolean
	 */
	 protected function checkBrowsers() {
		return (
			$this->checkBrowserWebTv() ||
			$this->checkBrowserInternetExplorer() ||
			$this->checkBrowserOpera() ||
			$this->checkBrowserGaleon() ||
			$this->checkBrowserNetscapeNavigator9Plus() ||
			$this->checkBrowserFirefox() ||
			$this->checkBrowserChrome() ||
			$this->checkBrowserOmniWeb() ||

			// common mobile
			$this->checkBrowserAndroid() ||
			$this->checkBrowseriPad() ||
			$this->checkBrowseriPod() ||
			$this->checkBrowseriPhone() ||
			$this->checkBrowserBlackBerry() ||
			$this->checkBrowserNokia() ||

			// common bots
			$this->checkBrowserGoogleBot() ||
			$this->checkBrowserMSNBot() ||
			$this->checkBrowserSlurp() ||

			// WebKit base check (post mobile and others)
			$this->checkBrowserSafari() ||
			
			// everyone else
			$this->checkBrowserNetPositive() ||
			$this->checkBrowserFirebird() ||
			$this->checkBrowserKonqueror() ||
			$this->checkBrowserIcab() ||
			$this->checkBrowserPhoenix() ||
			$this->checkBrowserAmaya() ||
			$this->checkBrowserLynx() ||
			$this->checkBrowserShiretoko() ||
			$this->checkBrowserIceCat() ||
			$this->checkBrowserW3CValidator() ||
			$this->checkBrowserMozilla() /* Mozilla is such an open standard that you must check it last */
		);
    }

    protected function checkBrowserBlackBerry() {
	    if( stripos($this->_agent,'blackberry') !== false ) {
		    $aresult = explode("/",stristr($this->_agent,"BlackBerry"));
		    $aversion = explode(' ',$aresult[1]);
		    $this->setVersion($aversion[0]);
		    $this->_browser_name = self::BROWSER_BLACKBERRY;
		    $this->setMobile(true);
		    return true;
	    }
	    return false;
    }

    protected function checkForAol() {
		$this->setAol(false);
		$this->setAolVersion(self::VERSION_UNKNOWN);

		if( stripos($this->_agent,'aol') !== false ) {
		    $aversion = explode(' ',stristr($this->_agent, 'AOL'));
		    $this->setAol(true);
		    $this->setAolVersion(preg_replace('/[^0-9\.a-z]/i', '', $aversion[1]));
		    return true;
	    }
	    return false;
    }


    protected function checkBrowserGoogleBot() {
	    if( stripos($this->_agent,'googlebot') !== false ) {
			$aresult = explode('/',stristr($this->_agent,'googlebot'));
			$aversion = explode(' ',$aresult[1]);
			$this->setVersion(str_replace(';','',$aversion[0]));
			$this->_browser_name = self::BROWSER_GOOGLEBOT;
			$this->setRobot(true);
			return true;
	    }
	    return false;
    }

	protected function checkBrowserMSNBot() {
		if( stripos($this->_agent,"msnbot") !== false ) {
			$aresult = explode("/",stristr($this->_agent,"msnbot"));
			$aversion = explode(" ",$aresult[1]);
			$this->setVersion(str_replace(";","",$aversion[0]));
			$this->_browser_name = self::BROWSER_MSNBOT;
			$this->setRobot(true);
			return true;
		}
		return false;
	}	    
    
    protected function checkBrowserW3CValidator() {
	    if( stripos($this->_agent,'W3C-checklink') !== false ) {
		    $aresult = explode('/',stristr($this->_agent,'W3C-checklink'));
		    $aversion = explode(' ',$aresult[1]);
		    $this->setVersion($aversion[0]);
		    $this->_browser_name = self::BROWSER_W3CVALIDATOR;
		    return true;
	    }
	    else if( stripos($this->_agent,'W3C_Validator') !== false ) {
			// Some of the Validator versions do not delineate w/ a slash - add it back in
			$ua = str_replace("W3C_Validator ", "W3C_Validator/", $this->_agent);
		    $aresult = explode('/',stristr($ua,'W3C_Validator'));
		    $aversion = explode(' ',$aresult[1]);
		    $this->setVersion($aversion[0]);
		    $this->_browser_name = self::BROWSER_W3CVALIDATOR;
		    return true;
	    }
	    return false;
    }

    protected function checkBrowserSlurp() {
	    if( stripos($this->_agent,'slurp') !== false ) {
		    $aresult = explode('/',stristr($this->_agent,'Slurp'));
		    $aversion = explode(' ',$aresult[1]);
		    $this->setVersion($aversion[0]);
		    $this->_browser_name = self::BROWSER_SLURP;
			$this->setRobot(true);
			$this->setMobile(false);
		    return true;
	    }
	    return false;
    }

    protected function checkBrowserInternetExplorer() {

	    // Test for v1 - v1.5 IE
	    if( stripos($this->_agent,'microsoft internet explorer') !== false ) {
		    $this->setBrowser(self::BROWSER_IE);
		    $this->setVersion('1.0');
		    $aresult = stristr($this->_agent, '/');
		    if( preg_match('/308|425|426|474|0b1/i', $aresult) ) {
			    $this->setVersion('1.5');
		    }
			return true;
	    }
	    // Test for versions > 1.5
	    else if( stripos($this->_agent,'msie') !== false && stripos($this->_agent,'opera') === false ) {
	    	// See if the browser is the odd MSN Explorer
	    	if( stripos($this->_agent,'msnb') !== false ) {
		    	$aresult = explode(' ',stristr(str_replace(';','; ',$this->_agent),'MSN'));
			    $this->setBrowser( self::BROWSER_MSN );
			    $this->setVersion(str_replace(array('(',')',';'),'',$aresult[1]));
			    return true;
	    	}
	    	$aresult = explode(' ',stristr(str_replace(';','; ',$this->_agent),'msie'));
	    	$this->setBrowser( self::BROWSER_IE );
	    	$this->setVersion(str_replace(array('(',')',';'),'',$aresult[1]));
	    	return true;
	    }
	    // Test for Pocket IE
	    else if( stripos($this->_agent,'mspie') !== false || stripos($this->_agent,'pocket') !== false ) {
		    $aresult = explode(' ',stristr($this->_agent,'mspie'));
		    $this->setPlatform( self::PLATFORM_WINDOWS_CE );
		    $this->setBrowser( self::BROWSER_POCKET_IE );
		    $this->setMobile(true);

		    if( stripos($this->_agent,'mspie') !== false ) {
			    $this->setVersion($aresult[1]);
		    }
		    else {
			    $aversion = explode('/',$this->_agent);
			    $this->setVersion($aversion[1]);
		    }
		    return true;
	    }
		return false;
    }

    protected function checkBrowserOpera() {
	    if( stripos($this->_agent,'opera mini') !== false ) {
		    $resultant = stristr($this->_agent, 'opera mini');
		    if( preg_match('/\//',$resultant) ) {
			    $aresult = explode('/',$resultant);
			    $aversion = explode(' ',$aresult[1]);
			    $this->setVersion($aversion[0]);
			}
		    else {
			    $aversion = explode(' ',stristr($resultant,'opera mini'));
			    $this->setVersion($aversion[1]);
		    }
		    $this->_browser_name = self::BROWSER_OPERA_MINI;
			$this->setMobile(true);
			return true;
	    }
	    else if( stripos($this->_agent,'opera') !== false ) {
		    $resultant = stristr($this->_agent, 'opera');
		    if( preg_match('/Version\/(10.*)$/',$resultant,$matches) ) {
			    $this->setVersion($matches[1]);
		    }
		    else if( preg_match('/\//',$resultant) ) {
			    $aresult = explode('/',str_replace("("," ",$resultant));
			    $aversion = explode(' ',$aresult[1]);
			    $this->setVersion($aversion[0]);
		    }
		    else {
			    $aversion = explode(' ',stristr($resultant,'opera'));
			    $this->setVersion(isset($aversion[1])?$aversion[1]:"");
		    }
		    $this->_browser_name = self::BROWSER_OPERA;
		    return true;
	    }
		return false;
    }


    protected function checkBrowserChrome() {
	    if( stripos($this->_agent,'Chrome') !== false ) {
		    $aresult = explode('/',stristr($this->_agent,'Chrome'));
		    $aversion = explode(' ',$aresult[1]);
		    $this->setVersion($aversion[0]);
		    $this->setBrowser(self::BROWSER_CHROME);
		    return true;
	    }
	    return false;
    }

    protected function checkBrowserWebTv() {
	    if( stripos($this->_agent,'webtv') !== false ) {
		    $aresult = explode('/',stristr($this->_agent,'webtv'));
		    $aversion = explode(' ',$aresult[1]);
		    $this->setVersion($aversion[0]);
		    $this->setBrowser(self::BROWSER_WEBTV);
		    return true;
	    }
	    return false;
    }

    protected function checkBrowserNetPositive() {
	    if( stripos($this->_agent,'NetPositive') !== false ) {
		    $aresult = explode('/',stristr($this->_agent,'NetPositive'));
		    $aversion = explode(' ',$aresult[1]);
		    $this->setVersion(str_replace(array('(',')',';'),'',$aversion[0]));
		    $this->setBrowser(self::BROWSER_NETPOSITIVE);
		    return true;
	    }
	    return false;
    }

    protected function checkBrowserGaleon() {
	    if( stripos($this->_agent,'galeon') !== false ) {
		    $aresult = explode(' ',stristr($this->_agent,'galeon'));
		    $aversion = explode('/',$aresult[0]);
		    $this->setVersion($aversion[1]);
		    $this->setBrowser(self::BROWSER_GALEON);
		    return true;
	    }
	    return false;
    }

    protected function checkBrowserKonqueror() {
	    if( stripos($this->_agent,'Konqueror') !== false ) {
		    $aresult = explode(' ',stristr($this->_agent,'Konqueror'));
		    $aversion = explode('/',$aresult[0]);
		    $this->setVersion($aversion[1]);
		    $this->setBrowser(self::BROWSER_KONQUEROR);
		    return true;
	    }
	    return false;
    }

    protected function checkBrowserIcab() {
	    if( stripos($this->_agent,'icab') !== false ) {
		    $aversion = explode(' ',stristr(str_replace('/',' ',$this->_agent),'icab'));
		    $this->setVersion($aversion[1]);
		    $this->setBrowser(self::BROWSER_ICAB);
		    return true;
	    }
	    return false;
    }

    protected function checkBrowserOmniWeb() {
	    if( stripos($this->_agent,'omniweb') !== false ) {
		    $aresult = explode('/',stristr($this->_agent,'omniweb'));
		    $aversion = explode(' ',isset($aresult[1])?$aresult[1]:"");
		    $this->setVersion($aversion[0]);
		    $this->setBrowser(self::BROWSER_OMNIWEB);
		    return true;
	    }
	    return false;
    }

    protected function checkBrowserPhoenix() {
	    if( stripos($this->_agent,'Phoenix') !== false ) {
		    $aversion = explode('/',stristr($this->_agent,'Phoenix'));
		    $this->setVersion($aversion[1]);
		    $this->setBrowser(self::BROWSER_PHOENIX);
		    return true;
	    }
	    return false;
    }

    protected function checkBrowserFirebird() {
	    if( stripos($this->_agent,'Firebird') !== false ) {
		    $aversion = explode('/',stristr($this->_agent,'Firebird'));
		    $this->setVersion($aversion[1]);
		    $this->setBrowser(self::BROWSER_FIREBIRD);
			return true;
	    }
	    return false;
    }

    protected function checkBrowserNetscapeNavigator9Plus() {
	    if( stripos($this->_agent,'Firefox') !== false && preg_match('/Navigator\/([^ ]*)/i',$this->_agent,$matches) ) {
		    $this->setVersion($matches[1]);
		    $this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR);
		    return true;
	    }
	    else if( stripos($this->_agent,'Firefox') === false && preg_match('/Netscape6?\/([^ ]*)/i',$this->_agent,$matches) ) {
		    $this->setVersion($matches[1]);
		    $this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR);
		    return true;
	    }
	    return false;
    }

    protected function checkBrowserShiretoko() {
	    if( stripos($this->_agent,'Mozilla') !== false && preg_match('/Shiretoko\/([^ ]*)/i',$this->_agent,$matches) ) {
		    $this->setVersion($matches[1]);
		    $this->setBrowser(self::BROWSER_SHIRETOKO);
		    return true;
	    }
	    return false;
    }

    protected function checkBrowserIceCat() {
	    if( stripos($this->_agent,'Mozilla') !== false && preg_match('/IceCat\/([^ ]*)/i',$this->_agent,$matches) ) {
		    $this->setVersion($matches[1]);
		    $this->setBrowser(self::BROWSER_ICECAT);
		    return true;
	    }
	    return false;
    }

    protected function checkBrowserNokia() {
	    if( preg_match("/Nokia([^\/]+)\/([^ SP]+)/i",$this->_agent,$matches) ) {
		    $this->setVersion($matches[2]);
			if( stripos($this->_agent,'Series60') !== false || strpos($this->_agent,'S60') !== false ) {
				$this->setBrowser(self::BROWSER_NOKIA_S60);
			}
			else {
				$this->setBrowser( self::BROWSER_NOKIA );
			}
		    $this->setMobile(true);
		    return true;
	    }
		return false;
    }

    protected function checkBrowserFirefox() {
	    if( stripos($this->_agent,'safari') === false ) {
			if( preg_match("/Firefox[\/ \(]([^ ;\)]+)/i",$this->_agent,$matches) ) {
				$this->setVersion($matches[1]);
				$this->setBrowser(self::BROWSER_FIREFOX);
				return true;
			}
			else if( preg_match("/Firefox$/i",$this->_agent,$matches) ) {
				$this->setVersion("");
				$this->setBrowser(self::BROWSER_FIREFOX);
				return true;
			}
		}
	    return false;
    }

    protected function checkBrowserIceweasel() {
		if( stripos($this->_agent,'Iceweasel') !== false ) {
			$aresult = explode('/',stristr($this->_agent,'Iceweasel'));
			$aversion = explode(' ',$aresult[1]);
			$this->setVersion($aversion[0]);
			$this->setBrowser(self::BROWSER_ICEWEASEL);
			return true;
		}
		return false;
	}

    protected function checkBrowserMozilla() {
	    if( stripos($this->_agent,'mozilla') !== false  && preg_match('/rv:[0-9].[0-9][a-b]?/i',$this->_agent) && stripos($this->_agent,'netscape') === false) {
		    $aversion = explode(' ',stristr($this->_agent,'rv:'));
		    preg_match('/rv:[0-9].[0-9][a-b]?/i',$this->_agent,$aversion);
		    $this->setVersion(str_replace('rv:','',$aversion[0]));
		    $this->setBrowser(self::BROWSER_MOZILLA);
		    return true;
	    }
	    else if( stripos($this->_agent,'mozilla') !== false && preg_match('/rv:[0-9]\.[0-9]/i',$this->_agent) && stripos($this->_agent,'netscape') === false ) {
		    $aversion = explode('',stristr($this->_agent,'rv:'));
		    $this->setVersion(str_replace('rv:','',$aversion[0]));
		    $this->setBrowser(self::BROWSER_MOZILLA);
		    return true;
	    }
	    else if( stripos($this->_agent,'mozilla') !== false  && preg_match('/mozilla\/([^ ]*)/i',$this->_agent,$matches) && stripos($this->_agent,'netscape') === false ) {
		    $this->setVersion($matches[1]);
		    $this->setBrowser(self::BROWSER_MOZILLA);
		    return true;
	    }
		return false;
    }

    protected function checkBrowserLynx() {
	    if( stripos($this->_agent,'lynx') !== false ) {
		    $aresult = explode('/',stristr($this->_agent,'Lynx'));
		    $aversion = explode(' ',(isset($aresult[1])?$aresult[1]:""));
		    $this->setVersion($aversion[0]);
		    $this->setBrowser(self::BROWSER_LYNX);
		    return true;
	    }
	    return false;
    }

    protected function checkBrowserAmaya() {
	    if( stripos($this->_agent,'amaya') !== false ) {
		    $aresult = explode('/',stristr($this->_agent,'Amaya'));
		    $aversion = explode(' ',$aresult[1]);
		    $this->setVersion($aversion[0]);
		    $this->setBrowser(self::BROWSER_AMAYA);
		    return true;
	    }
	    return false;
    }

    protected function checkBrowserSafari() {
	    if( stripos($this->_agent,'Safari') !== false && stripos($this->_agent,'iPhone') === false && stripos($this->_agent,'iPod') === false ) {
		    $aresult = explode('/',stristr($this->_agent,'Version'));
		    if( isset($aresult[1]) ) {
			    $aversion = explode(' ',$aresult[1]);
			    $this->setVersion($aversion[0]);
		    }
		    else {
			    $this->setVersion(self::VERSION_UNKNOWN);
		    }
		    $this->setBrowser(self::BROWSER_SAFARI);
		    return true;
	    }
	    return false;
    }

    protected function checkBrowseriPhone() {
	    if( stripos($this->_agent,'iPhone') !== false ) {
		    $aresult = explode('/',stristr($this->_agent,'Version'));
		    if( isset($aresult[1]) ) {
			    $aversion = explode(' ',$aresult[1]);
			    $this->setVersion($aversion[0]);
		    }
		    else {
			    $this->setVersion(self::VERSION_UNKNOWN);
		    }
		    $this->setMobile(true);
		    $this->setBrowser(self::BROWSER_IPHONE);
		    return true;
	    }
	    return false;
    }

    protected function checkBrowseriPad() {
	    if( stripos($this->_agent,'iPad') !== false ) {
		    $aresult = explode('/',stristr($this->_agent,'Version'));
		    if( isset($aresult[1]) ) {
			    $aversion = explode(' ',$aresult[1]);
			    $this->setVersion($aversion[0]);
		    }
		    else {
			    $this->setVersion(self::VERSION_UNKNOWN);
		    }
		    $this->setMobile(true);
		    $this->setBrowser(self::BROWSER_IPAD);
		    return true;
	    }
	    return false;
    }

    protected function checkBrowseriPod() {
	    if( stripos($this->_agent,'iPod') !== false ) {
		    $aresult = explode('/',stristr($this->_agent,'Version'));
		    if( isset($aresult[1]) ) {
			    $aversion = explode(' ',$aresult[1]);
			    $this->setVersion($aversion[0]);
		    }
		    else {
			    $this->setVersion(self::VERSION_UNKNOWN);
		    }
		    $this->setMobile(true);
		    $this->setBrowser(self::BROWSER_IPOD);
		    return true;
	    }
	    return false;
    }

    protected function checkBrowserAndroid() {
	    if( stripos($this->_agent,'Android') !== false ) {
		    $aresult = explode(' ',stristr($this->_agent,'Android'));
		    if( isset($aresult[1]) ) {
			    $aversion = explode(' ',$aresult[1]);
			    $this->setVersion($aversion[0]);
		    }
		    else {
			    $this->setVersion(self::VERSION_UNKNOWN);
		    }
		    $this->setMobile(true);
		    $this->setBrowser(self::BROWSER_ANDROID);
		    return true;
	    }
	    return false;
    }

    /**
     * Determine the user's platform
     */
    protected function checkPlatform() {
	    if( stripos($this->_agent, 'windows') !== false ) {
		    $this->_platform = self::PLATFORM_WINDOWS;
	    }
	    else if( stripos($this->_agent, 'iPad') !== false ) {
		    $this->_platform = self::PLATFORM_IPAD;
	    }
	    else if( stripos($this->_agent, 'iPod') !== false ) {
		    $this->_platform = self::PLATFORM_IPOD;
	    }
	    else if( stripos($this->_agent, 'iPhone') !== false ) {
		    $this->_platform = self::PLATFORM_IPHONE;
	    }
	    elseif( stripos($this->_agent, 'mac') !== false ) {
		    $this->_platform = self::PLATFORM_APPLE;
	    }
	    elseif( stripos($this->_agent, 'android') !== false ) {
		    $this->_platform = self::PLATFORM_ANDROID;
	    }
	    elseif( stripos($this->_agent, 'linux') !== false ) {
		    $this->_platform = self::PLATFORM_LINUX;
	    }
	    else if( stripos($this->_agent, 'Nokia') !== false ) {
		    $this->_platform = self::PLATFORM_NOKIA;
	    }
	    else if( stripos($this->_agent, 'BlackBerry') !== false ) {
		    $this->_platform = self::PLATFORM_BLACKBERRY;
	    }
	    elseif( stripos($this->_agent,'FreeBSD') !== false ) {
		    $this->_platform = self::PLATFORM_FREEBSD;
	    }
	    elseif( stripos($this->_agent,'OpenBSD') !== false ) {
		    $this->_platform = self::PLATFORM_OPENBSD;
	    }
	    elseif( stripos($this->_agent,'NetBSD') !== false ) {
		    $this->_platform = self::PLATFORM_NETBSD;
	    }
	    elseif( stripos($this->_agent, 'OpenSolaris') !== false ) {
		    $this->_platform = self::PLATFORM_OPENSOLARIS;
	    }
	    elseif( stripos($this->_agent, 'SunOS') !== false ) {
		    $this->_platform = self::PLATFORM_SUNOS;
	    }
	    elseif( stripos($this->_agent, 'OS\/2') !== false ) {
		    $this->_platform = self::PLATFORM_OS2;
	    }
	    elseif( stripos($this->_agent, 'BeOS') !== false ) {
		    $this->_platform = self::PLATFORM_BEOS;
	    }
	    elseif( stripos($this->_agent, 'win') !== false ) {
		    $this->_platform = self::PLATFORM_WINDOWS;
	    }

    }
}
?>

Solution 5 - Php

I have created a function in PHP language to get browser name, browser version, operating system (windows/linux etc.) along with device type (desktop / mobile / tablet).

function getBrowserInfo(){
    $browserInfo = array('user_agent'=>'','browser'=>'','browser_version'=>'','os_platform'=>'','pattern'=>'', 'device'=>'');

    $u_agent = $_SERVER['HTTP_USER_AGENT']; 
    $bname = 'Unknown';
    $ub = 'Unknown';
    $version = "";
    $platform = 'Unknown';

    $deviceType='Desktop';

    if(preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$u_agent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($u_agent,0,4))){

        $deviceType='Mobile';

    }

    if($_SERVER['HTTP_USER_AGENT'] == 'Mozilla/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10') {
        $deviceType='Tablet';
    }

    if(stristr($_SERVER['HTTP_USER_AGENT'], 'Mozilla/5.0(iPad;')) {
        $deviceType='Tablet';
    }

    //$detect = new Mobile_Detect();
    
    //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 user agent yes seperately and for good reason
    if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent)) 
    { 
        $bname = 'IE'; 
        $ub = "MSIE";

    } else if(preg_match('/Firefox/i',$u_agent))
    { 
        $bname = 'Mozilla Firefox'; 
        $ub = "Firefox"; 

    } else if(preg_match('/Chrome/i',$u_agent) && (!preg_match('/Opera/i',$u_agent) && !preg_match('/OPR/i',$u_agent))) 
    { 
        $bname = 'Chrome'; 
        $ub = "Chrome"; 

    } else if(preg_match('/Safari/i',$u_agent) && (!preg_match('/Opera/i',$u_agent) && !preg_match('/OPR/i',$u_agent))) 
    { 
        $bname = 'Safari'; 
        $ub = "Safari"; 

    } else if(preg_match('/Opera/i',$u_agent) || preg_match('/OPR/i',$u_agent)) 
    { 
        $bname = 'Opera'; 
        $ub = "Opera"; 

    } else if(preg_match('/Netscape/i',$u_agent)) 
    { 
        $bname = 'Netscape'; 
        $ub = "Netscape"; 

    } else if((isset($u_agent) && (strpos($u_agent, 'Trident') !== false || strpos($u_agent, 'MSIE') !== false)))
    {
        $bname = 'Internet Explorer'; 
        $ub = 'Internet Explorer'; 
    } 
    

    // 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(
        'user_agent' => $u_agent,
        'browser'      => $bname,
        'browser_version'   => $version,
        'os_platform'  => $platform,
        'pattern'   => $pattern,
        'device'    => $deviceType
    );
}

This solved my problem of browser detection, I hope, this will also help you. Thank you.

Solution 6 - Php

Use get_browser() function.

It can give you output like this:

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
    .... 

Solution 7 - Php

  • There is a conflict between (Safari) and (Opera) and (Chrome) !!!

  • The above codes couldn't work properly

This is my code, and it works very well without any conflict:

function ExactBrowserName()
{

$ExactBrowserNameUA=$_SERVER['HTTP_USER_AGENT'];

if (strpos(strtolower($ExactBrowserNameUA), "safari/") and strpos(strtolower($ExactBrowserNameUA), "opr/")) {
	// OPERA
	$ExactBrowserNameBR="Opera";
} elseIf (strpos(strtolower($ExactBrowserNameUA), "safari/") and strpos(strtolower($ExactBrowserNameUA), "chrome/")) {
	// CHROME
	$ExactBrowserNameBR="Chrome";
} elseIf (strpos(strtolower($ExactBrowserNameUA), "msie")) {
	// INTERNET EXPLORER
	$ExactBrowserNameBR="Internet Explorer";
} elseIf (strpos(strtolower($ExactBrowserNameUA), "firefox/")) {
	// FIREFOX
	$ExactBrowserNameBR="Firefox";
} elseIf (strpos(strtolower($ExactBrowserNameUA), "safari/") and strpos(strtolower($ExactBrowserNameUA), "opr/")==false and strpos(strtolower($ExactBrowserNameUA), "chrome/")==false) {
	// SAFARI
	$ExactBrowserNameBR="Safari";
} else {
	// OUT OF DATA
	$ExactBrowserNameBR="OUT OF DATA";
};

return $ExactBrowserNameBR;
}

Solution 8 - Php

Since some codes gave a wrong result for Edge and Opera, I suggest to try this code:

$popularBrowsers = ["Opera","OPR/", "Edg", "Chrome", "Safari", "Firefox", "MSIE", "Trident"];

$userAgent = $_SERVER['HTTP_USER_AGENT'];
$userBrowser = 'Other less popular browsers';
foreach ($popularBrowsers as $browser) {
    if (strpos($userAgent, $browser) !== false) {
        $userBrowser = $browser;
        break;
    }
}

switch ($userBrowser) {
    case 'OPR/':
        $userBrowser = 'Opera';
        break;
    case 'MSIE':
        $userBrowser = 'Internet Explorer';
        break;

    case 'Trident':
        $userBrowser = 'Internet Explorer';
        break;

    case 'Edg':
        $userBrowser = 'Microsoft Edge';
        break;
}

echo "Your browser: " . $userBrowser;

For information about agent strings for different browsers and some similarities in them, please refer to: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent

Solution 9 - Php

Use 51Degrees.com device detection solution to detect browser name, vendor and version.

First, follow the 4-step guide to incorporate device detector in to your project. When I say incorporate I mean download archive with PHP code and database file, extract them and include 2 files. That's all there is to do to incorporate.

Once that's done you can use the following properties to get browser information:
$_51d['BrowserName'] - Gives you the name of the browser (Safari, Molto, Motorola, MStarBrowser etc).
$_51d['BrowserVendor'] - Gives you the company who created browser.
$_51d['BrowserVersion'] - Version number of the browser

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAwanView Question on Stackoverflow
Solution 1 - PhpdiEchoView Answer on Stackoverflow
Solution 2 - PhpChamika SandamalView Answer on Stackoverflow
Solution 3 - PhpParag TyagiView Answer on Stackoverflow
Solution 4 - PhpPrasad RajapakshaView Answer on Stackoverflow
Solution 5 - PhpKamleshView Answer on Stackoverflow
Solution 6 - PhpSergio TulentsevView Answer on Stackoverflow
Solution 7 - PhpMahdi JaziniView Answer on Stackoverflow
Solution 8 - PhpNasim B. DView Answer on Stackoverflow
Solution 9 - PhpMikeView Answer on Stackoverflow