search for in the  
<exithighlight_file>
Last updated: Thu, 19 May 2005

get_browser

(PHP 3, PHP 4, PHP 5)

get_browser --  Tells what the user's browser is capable of

Description

object get_browser ( [string user_agent [, bool return_array]] )

get_browser() attempts to determine the capabilities of the user's browser. This is done by looking up the browser's information in the browscap.ini file.

By default, the value of $_SERVER['HTTP_USER_AGENT'] is used; however, you can alter this (i.e., look up another browser's info) by passing the optional user_agent parameter to get_browser(). You can bypass user_agent parameter with NULL value.

The information is returned in an object, which will contain various data elements representing, for instance, the browser's major and minor version numbers and ID string; TRUE/FALSE values for features such as frames, JavaScript, and cookies; and so forth.

As of PHP 4.3.2, if the optional parameter return_array is TRUE, this function will return an array instead of an object.

Example 1. Listing all information about the users browser

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

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

The above example will output something similar to:

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

The cookies value simply means that the browser itself is capable of accepting cookies and does not mean the user has enabled the browser to accept cookies or not. The only way to test if cookies are accepted is to set one with setcookie(), reload, and check for the value.

Note: In order for this to work, your browscap configuration setting in php.ini must point to the correct location of the browscap.ini file on your system.

browscap.ini is not bundled with PHP, but you may find an up-to-date php_browscap.ini file here.

While browscap.ini contains information on many browsers, it relies on user updates to keep the database current. The format of the file is fairly self-explanatory.



User Contributed Notes
get_browser
pal at degerstrom dot com
26-Apr-2005 08:13
This might be useful for some until the Gary Keith updates his library. I added this to my browscap.ini to detect the latest Safari update for Panther, and the new Safari in Tiger:

;;; Added manually 05.04.19 for Safari 1.3
[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; *) AppleWebKit/* (*) Safari/31?]
parent=Safari
version=1.3
majorver=1
minorver=3

;;; Added manually 05.04.26 for Safari 2.0 (Shipped with Tiger)
[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; *) AppleWebKit/* (*) Safari/41?]
parent=Safari
version=2.0
majorver=2
minorver=0

Note: Full $_SERVER['HTTP_USER_AGENT'] for Safari 2 (Tiger) is
     Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/412 (KHTML, like Gecko) Safari/412

(Disclaimer: I do not know if the entries above conform to whatever syntax standard Gary uses in his file, but it works fine for me).

Pål Degerstrøm
tectonikNOSPAM at free dot fr
07-Apr-2005 04:17
Another (short) sequential php script to determine browsers family and version.
<?
//        _______
// ----- | CONF. |
//        ¯¯¯¯¯¯¯
// add new browsers in lower case here, separated
// by spaces -  order is important: from left to
// right browser family becomes more precise
$browsers = "mozilla msie gecko firefox ";
$browsers.= "konqueror safari netscape navigator ";
$browsers.= "opera mosaic lynx amaya omniweb";

//        _______
// ----- |PROCESS|
//        ¯¯¯¯¯¯¯
$browsers = split(" ", $browsers);

$nua = strToLower( $_SERVER['HTTP_USER_AGENT']);

$l = strlen($nua);
for (
$i=0; $i<count($browsers); $i++){
 
$browser = $browsers[$i];
 
$n = stristr($nua, $browser);
  if(
strlen($n)>0){
  
$GLOBALS["ver"] = "";
  
$GLOBALS["nav"] = $browser;
  
$j=strpos($nua, $GLOBALS["nav"])+$n+strlen($GLOBALS["nav"])+1;
   for (;
$j<=$l; $j++){
    
$s = substr ($nua, $j, 1);
     if(
is_numeric($GLOBALS["ver"].$s) )
    
$GLOBALS["ver"] .= $s;
     else
     break;
   }
  }
}

//        _______
// ----- |  USE  |
//        ¯¯¯¯¯¯¯
echo("<pre>Your browser is: ");
echo(
$GLOBALS["nav"] . " " . $GLOBALS["ver"] . "</pre>");
?>

source: http://tectonik.free.fr/technos/php/
another%20PHP%20browser%20sniffer.php
jasperbg at gmail dot com
02-Apr-2005 10:23
To :: TomkOx ::

It's actually better to use strpos(). You need to use === or !== rather than == or != to check the return value though, otherwise you'll get 0 which equates to false when the string is found at position 0.

For example:

<?php
if(strpos($haystack, $needle) !== false) {
/* String was found */
} else {
/* String wasn't found */
}
?>

That'll work for any position, even 0.
:: TomkOx ::
31-Mar-2005 12:12
It is not good to use function: strpos() in detecting browser or OS by HTTP_USER_AGENT. Better is to use function strstr() becouse some strings returned by HTTP_USER_AGENT have 'needed information' at 1st (0) position of the string. Function strpos() 'will not find' for eg. signature of Opera on OSX. I think it's better to use like this (example):

<?

// ...

Class SomeDetectoriumClass {

// ...

// here starts this method (function):

  
function aboutNetGuest() {
  
$curos=strtolower($_SERVER['HTTP_USER_AGENT']);
  
$uip=$_SERVER['REMOTE_ADDR'];
  
$uht=gethostbyaddr($_SERVER['REMOTE_ADDR']);

           if (
strstr($curos,"mac")) {
                  
$uos="MacOS";
                   } else if (
strstr($curos,"linux")) {
                  
$uos="Linux";
                   } else if (
strstr($curos,"win")) {
                  
$uos="Windows";
                   } else if (
strstr($curos,"bsd")) {
                  
$uos="BSD";
                   } else if (
strstr($curos,"qnx")) {
                  
$uos="QNX";
                   } else if (
strstr($curos,"sun")) {
                  
$uos="SunOS";
                   } else if (
strstr($curos,"solaris")) {
                  
$uos="Solaris";
                   } else if (
strstr($curos,"irix")) {
                  
$uos="IRIX";
                   } else if (
strstr($curos,"aix")) {
                  
$uos="AIX";
                   } else if (
strstr($curos,"unix")) {
                  
$uos="Unix";
                   } else if (
strstr($curos,"amiga")) {
                  
$uos="Amiga";
                   } else if (
strstr($curos,"os/2")) {
                  
$uos="OS/2";
                   } else if (
strstr($curos,"beos")) {
                  
$uos="BeOS";
                   } else {
$uos="[?]EgzoticalOS";
           }
          
           if (
strstr($curos,"gecko")) {
                             if (
strstr($curos,"safari")) {
                            
$bos="Safari";
                             } else if (
strstr($curos,"camino")) {
                            
$bos="Camino";
                           } else if (
strstr($curos,"firefox")) {
                          
$bos="Firefox";
                           } else if (
strstr($curos,"netscape")) {
                          
$bos="Netscape";
                           } else {
$bos="Mozilla";
                           }
           } else if (
strstr($curos,"opera")) {
                          
$bos="Opera";
           } else if (
strstr($curos,"msie")) {
                          
$bos="Internet Exploder";
           } else if (
strstr($curos,"voyager")) {
                          
$bos="Voyager";       
           } else if (
strstr($curos,"lynx")) {
                          
$bos="Lynx";
           } else {
$bos="[?]EgzoticalBrowser";
           }
  
   return array (
$uos,$bos,$uip,$uht);
   }
// - Class Closer;

// ...

?>

Regards from Poland, TomkOx. ;)
steve
11-Feb-2005 06:17
displays browser and version # in an array.

<?php

// important to order by parent ie MSIE then OPERA.

$browser = array (
  
"MSIE",            // parent
  
"OPERA",
  
"MOZILLA",        // parent
  
"NETSCAPE",
  
"FIREFOX",
  
"SAFARI"
);

$info[browser] = "OTHER";

foreach (
$browser as $parent) {
  
$s = strpos(strtoupper($_SERVER['HTTP_USER_AGENT']), $parent);
  
$f = $s + strlen($parent);
  
$version = substr($_SERVER['HTTP_USER_AGENT'], $f, 5);
  
$version = preg_replace('/[^0-9,.]/','',$version);
  
   if (
strpos(strtoupper($_SERVER['HTTP_USER_AGENT']), $parent)) {
  
$info[browser] = $parent;
  
$info[version] = $version;
   }
}

print_r($info);

?>
Melchior (webmaster at ffx-ultima dot com)
24-Oct-2004 10:33
My contribution for detected the browsers

<?php

if ( strpos($_SERVER['HTTP_USER_AGENT'], 'Gecko') )
{
   if (
strpos($_SERVER['HTTP_USER_AGENT'], 'Netscape') )
   {
    
$browser = 'Netscape (Gecko/Netscape)';
   }
   else if (
strpos($_SERVER['HTTP_USER_AGENT'], 'Firefox') )
   {
    
$browser = 'Mozilla Firefox (Gecko/Firefox)';
   }
   else
   {
    
$browser = 'Mozilla (Gecko/Mozilla)';
   }
}
else if (
strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') )
{
   if (
strpos($_SERVER['HTTP_USER_AGENT'], 'Opera') )
   {
    
$browser = 'Opera (MSIE/Opera/Compatible)';
   }
   else
   {
    
$browser = 'Internet Explorer (MSIE/Compatible)';
   }
}
else
{
  
$browser = 'Others browsers';
}

echo
$browser;

?>

Melchior ;)
hh
28-Jun-2004 02:19
Another PHP browser detection script that might be of use to you is here:
http://tech.ratmachines.com/downloads/php_browser_detection.php
This script uses a fairly different logic than get_browser, and doesn't worry about things like table/frame ability. This script was being used by mozdev to id Mozilla versions, since it specializes in that kind of specialized id. It also has unix/linux version os iding.
max at phpexpert dot de
26-Mar-2004 09:14
Be aware of the fact that this function shows what a specific browser might be able to show, but NOT what the user has turned on/off.

So maybe this function tells you that the browser is abel to to javascript even when javascript is turned off by the user.
bishop
05-Aug-2003 01:46
PHP is sensitive to characters outside the range [ A-Za-z0-9_] as values in .ini files.  For example

browser=Opera (Bork Version)

causes PHP to complain, as it doesn't like the parentheses.

If you place quotation marks around the values for all keys in the browscap.ini file, you'll save yourself parsing problems.  Do this in eg vi with %s/=\(.*\)/="\1"/g

You could of course use PHP itself to fixup the file.  Exercise left to the reader.
verx at implix dot com
09-Dec-2002 04:57
Please keep in mind that you should somehow (for example in session) cache the required results of get_browser() because it really slows thinks down.

We have experienced that without querying for browser data our scripts would run 120-130% faster. the explanation is that over 200kb long file (browscap.ini) has to be loaded and parsed everytime someone access any page (we need browser results on all pages).

So keep results in session and expect a performance boost.
les at hazlewood dot com
03-Sep-2001 08:57
phpSniff (noted in a few places above) is absolutely fantastic.  I just installed it, and it is a godsend!  It now handles all of my session information needed to go in my database.  Thanks for you folks who posted that great Sourceforge resource!  http://phpsniff.sourceforge.net/
philip at cornado dot com
25-Aug-2001 10:05
nick at category4 dot com
12-Jun-2001 06:21
Here's a quick way to test for a Netscape browser.  IE and Konqueror and several others call themselves "Mozilla", but they always qualify it with the word "compatible."

$isns = stristr($HTTP_USER_AGENT, "Mozilla") && (!(stristr($HTTP_USER_AGENT, "compatible")));
triad at df dot lth dot se
30-Jul-2000 06:17
The only way browscap examines the target browser is through the HTTP_USER_AGENT so there is no way you can determine installed plug-ins. The only way to do that is through client-side JavaScripts.
andysmith at post dot com
06-May-2000 04:04
the example is great if you just want to spit out all that stuff, but i highly doubt anybody really wants to do that. To use the get_browser object in a conditional statement, do something like this:

$ua = get_browser ();
if ( ( $ua->browser == "Netscape" ) && ( $ua->version < 5 ) ) {
     // code to fix the page for netscape :)
}

<exithighlight_file>
 Last updated: Thu, 19 May 2005
Copyright © 2001-2005 The PHP Group
All rights reserved.
This unofficial mirror is operated at: The Server Pages
Last updated: Thu May 19 17:35:34 2005 CDT