杂项 函数
在线手册:中文 英文
PHP手册

get_browser

(PHP 4, PHP 5)

get_browser获取浏览器具有的功能

说明

mixed get_browser ([ string $user_agent [, bool $return_array = false ]] )

通过查找 browscap.ini 文件中的浏览器信息,尝试检测用户的浏览器所具有的功能。

参数

user_agent

要分析的用户代理。默认使用HTTP头中User-Agent的值,不过,你可以通过传递该参数改变User-Agent。(比如查找另一个浏览器的信息)

你可以传递一个 NULL 来忽略该参数。

return_array

如果设置为 TRUE,该函数会返回一个 array,而不是 object

返回值

信息会以包含一系列数据的数组或者对象返回。例如:浏览器的主版本号、次版本号和ID字符串;框架、JavaScript、cookies等功能是否支持 TRUE/FALSE 的值。

cookies 的值仅意味着浏览器是否具有接收cookies的功能,不代表用户是否已允许启用cookies。 测试的唯一办法,只有通过 setcookie() 设置一个cookie,刷新页面并检测该cookie的值。

更新日志

版本 说明
4.3.2 添加了可选参数 return_array

范例

Example #1 列出所有用户浏览器的信息

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

$browser get_browser(nulltrue);
print_r($browser);
?>

以上例程的输出类似于:

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

注释

Note:

为了能让该函数运作,在 php.ini 中配置的 browscap 必须指向 browscap.ini 文件的正确位置。

browscap.ini 并未内置在PHP中,不过你可以在这里找到最新的 » php_browscap.ini

browscap.ini 包含的诸多浏览器信息依赖于用户更新该数据库。该文件的格式不言自明。


杂项 函数
在线手册:中文 英文
PHP手册
PHP手册 - N: 获取浏览器具有的功能

用户评论:

bondhalhey at gmail dot com (08-Mar-2012 08:36)

Hi @kaahzix: In order for your function getBrowser() to check Chrome properly, the preg_match() for Chrome has to come before the preg_match() for Safari.

Otherwise Chrome is detected as Safarai (atleast in the latest version of Chrome)

kaahzix (24-Feb-2012 05:37)

function getBrowser()
    {
        $u_agent = $_SERVER['HTTP_USER_AGENT'];
        $ub = '';
        if(preg_match('/MSIE/i',$u_agent))
        {
            $ub = "Internet Explorer";
        }
        elseif(preg_match('/Firefox/i',$u_agent))
        {
            $ub = "Mozilla Firefox";
        }
        elseif(preg_match('/Safari/i',$u_agent))
        {
            $ub = "Apple Safari";
        }
        elseif(preg_match('/Chrome/i',$u_agent))
        {
            $ub = "Google Chrome";
        }
        elseif(preg_match('/Flock/i',$u_agent))
         {
            $ub = "Flock";
        }
        elseif(preg_match('/Opera/i',$u_agent))
        {
            $ub = "Opera";
        }
        elseif(preg_match('/Netscape/i',$u_agent))
        {
            $ub = "Netscape";
        }
        return $ub;
    }

meduza (27-Dec-2011 09:48)

I stopped trying to detect the browser name and the browser's version, due to the non standard user-agents, is impossible to cover all the possible browsers, and cover only the most used ones is not good.
I only detect the platform, the engine and the version, that cover a lot of possible browsers and let me code based on that, for example, the engine gecko, covers firefox, seamonkey and all the gecko based browsers.

this is a example piece of code taken from my own, is maybe incomplete but as example is good, to detect the engines.

<?php
/****** browser engine detection **************/
//browsers
define("UNKNOWN", 0);
define("TRIDENT", 1);
define("GECKO", 2);
define("PRESTO", 3);
define("WEBKIT", 4);
define("VALIDATOR", 5);
define("ROBOTS", 6);

if(!isset(
$_SESSION["info"]['browser'])) {
   
$_SESSION["info"]['browser']['engine'] = UNKNOWN;
   
$_SESSION["info"]['browser']['version'] = UNKNOWN;
   
$_SESSION["info"]['browser']['platform'] = 'Unknown';

   
$navigator_user_agent = ' ' . strtolower($_SERVER['HTTP_USER_AGENT']);

    if (
strpos($navigator_user_agent, 'linux')) :
       
$_SESSION["info"]['browser']['platform'] = 'Linux';
    elseif (
strpos($navigator_user_agent, 'mac')) :
       
$_SESSION["info"]['browser']['platform'] = 'Mac';
    elseif (
strpos($navigator_user_agent, 'win')) :
       
$_SESSION["info"]['browser']['platform'] = 'Windows';
    endif;

    if (
strpos($navigator_user_agent, "trident")) {
       
$_SESSION["info"]['browser']['engine'] = TRIDENT;
       
$_SESSION["info"]['browser']['version'] = floatval(substr($navigator_user_agent, strpos($navigator_user_agent, "trident/") + 8, 3));
    }
    elseif (
strpos($navigator_user_agent, "webkit")) {
       
$_SESSION["info"]['browser']['engine'] = WEBKIT;
       
$_SESSION["info"]['browser']['version'] = floatval(substr($navigator_user_agent, strpos($navigator_user_agent, "webkit/") + 7, 8));
    }
        elseif (
strpos($navigator_user_agent, "presto")) {
       
$_SESSION["info"]['browser']['engine'] = PRESTO;
       
$_SESSION["info"]['browser']['version'] = floatval(substr($navigator_user_agent, strpos($navigator_user_agent, "presto/") + 6, 7));
    }
    elseif (
strpos($navigator_user_agent, "gecko")) {
       
$_SESSION["info"]['browser']['engine'] = GECKO;
       
$_SESSION["info"]['browser']['version'] = floatval(substr($navigator_user_agent, strpos($navigator_user_agent, "gecko/") + 6, 9));
    }
    elseif (
strpos($navigator_user_agent, "robot"))
       
$_SESSION["info"]['browser']['engine'] = ROBOTS;
    elseif (
strpos($navigator_user_agent, "spider"))
       
$_SESSION["info"]['browser']['engine'] = ROBOTS;
    elseif (
strpos($navigator_user_agent, "bot"))
       
$_SESSION["info"]['browser']['engine'] = ROBOTS;
    elseif (
strpos($navigator_user_agent, "crawl"))
       
$_SESSION["info"]['browser']['engine'] = ROBOTS;
    elseif (
strpos($navigator_user_agent, "search"))
       
$_SESSION["info"]['browser']['engine'] = ROBOTS;
    elseif (
strpos($navigator_user_agent, "w3c_validator"))
       
$_SESSION["info"]['browser']['engine'] = VALIDATOR;
    elseif (
strpos($navigator_user_agent, "jigsaw"))
       
$_SESSION["info"]['browser']['engine'] = VALIDATOR;

echo
"<pre>\n\nEngine detected: ".$_SESSION["info"]['browser']['engine'];
switch(
$_SESSION["info"]['browser']['engine']) {
    case
UNKNOWN: echo " (unknown)";
    break;
    case
TRIDENT: echo " (trident)";
    break;
    case
GECKO: echo " (gecko)";
    break;
    case
PRESTO: echo " (presto)";
    break;
    case
WEBKIT: echo " (Webkit)";
    break;
    case
VALIDATOR: echo " (validator)";
    break;
    case
ROBOTS: echo " (robot)";
}
echo
"\nEngine version: ".$_SESSION["info"]['browser']['version'];
echo
"\nPlataform detected: ".$_SESSION["info"]['browser']['platform'];
echo
" \n\n</pre>";
?>

PD: you can add more engines and use an array, I just removed that and put the most popular engines as example, and used elseif instead, this code maybe have errors because is just an example.

Anonymous (11-Jul-2011 02:52)

For those of you using this function to target MSIE, a better idea maybe to use MSIE specific conditional comments. More info: <http://msdn.microsoft.com/en-us/library/ms537512%28VS.85%29.aspx>.

For example to indicate your disregard for users of MSIE 6 or earlier:

<!--[if lt IE 7]>It appears that you are using a <em>very</em> old version of MS Internet Explorer (MSIE). If you seriously want to continue to use MSIE, at least <a href="http://www.microsoft.com/windows/internet-explorer/">upgrade</a>.<![endif]-->

Simeon (09-Dec-2010 01:27)

This code is for placing a box in the corner of IE user's page warning of the disregard the web-designer has for the website's appearance in IE.  Call the box with ie_box(). Style and position the box how you want using the iebox css class.

<?php
function using_ie()
{
   
$u_agent = $_SERVER['HTTP_USER_AGENT'];
   
$ub = False;
    if(
preg_match('/MSIE/i',$u_agent))
    {
       
$ub = True;
    }
   
    return
$ub;
}

function
ie_box() {
    if (
using_ie()) {
       
?>
        <div class="iebox">
            This page is not designed for Intenet Explorer.  If you want to see this webpage as intended, please use a standards compliant browser, such as <a href="http://www.google.com/chrome">Google Chrome</a>.
        </div>
        <?php
   
return;
    }
}
?>

ruudrp at live dot nl (28-Nov-2010 11:31)

To my surprise I found that none of the get_browser alternatives output the correct name / version combination that I was looking for using Opera or Chrome. They either give the wrong name eg Safari when in fact it should be Chrome and if the ua string includes a version number as with the latest versions of Chrome and Opera the wrong number is reported. So I took bits and pieces from the various examples and combined them and added a check for version.

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

henda dot exe at gmail dot com (16-Aug-2010 05:27)

Just a warning to anybody using the preg_match function to determine what browser the viewer is using. I found with google chrome the array contains the following entries;
(Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.126 Safari/533.4

As I was using preg_match('/Chrome/i',$u_agent)) and preg_match('/Safari/i',$u_agent)) i found my script was reporting browsers as safari when infact the browser in use was google chrome.

Becheru Petru-Ioan (04-Apr-2010 11:39)

IE has a nasty bug called the Peekaboo bug that affected my website. I found that printing a '_' before the html tag of the webpage gets rid of this nasty bug. Using code inspirated by comment bellow here is the  code that detects if a visitor is using internet explorer:

<?php
$known
= array('msie', 'firefox', 'safari', 'webkit', 'opera', 'netscape', 'konqueror', 'gecko');
preg_match_all( '#(?<browser>' . join('|', $known) .
   
')[/ ]+(?<version>[0-9]+(?:\.[0-9]+)?)#', strtolower( $_SERVER[ 'HTTP_USER_AGENT ' ]), $browser );
if(
$browser['browser'][0]=='msie') print('_');
?>

Brinley Ang (02-Apr-2010 03:38)

This is the latest format of the array returned from this call

Array
{
    [browser_name_regex] => ^mozilla/5\.0 (x11; .*; .*linux.*; .*; rv:1\.9\..*) gecko/.* firefox/3\.5.*$
    [browser_name_pattern] => Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9.*) Gecko/* Firefox/3.5*
    [parent] => Firefox 3.5
    [platform] => Linux
    [browser] => Firefox
    [version] => 3.5
    [majorver] => 3
    [minorver] => 5
    [frames] => 1
    [iframes] => 1
    [tables] => 1
    [cookies] => 1
    [javaapplets] => 1
    [javascript] => 1
    [cssversion] => 3
    [supportscss] => 1
    [alpha] =>
    [beta] =>
    [win16] =>
    [win32] =>
    [win64] =>
    [backgroundsounds] =>
    [cdf] =>
    [vbscript] =>
    [activexcontrols] =>
    [isbanned] =>
    [ismobiledevice] =>
    [issyndicationreader] =>
    [crawler] =>
    [aol] =>
    [aolversion] => 0
}

robert at broofa dot com (18-Jul-2009 09:33)

If you're just finding this API, note that you may want to use a lighter-weight
browser detection script.  get_browser() requires the "browscap.ini" file,
which is 300KB+.  Loading and processing this file will likely impact script
performance.  Although it surely provides excellent detection results, in most
cases a much simpler method can be just as effective.  This is why so many
previous commenters have provided alternate implementations.

Here's the solution I ended up using, which I've tested on the agents listed at
http://whatsmyuseragent.com/CommonUserAgents.asp It has the advantage of being
compact and reasonably easy to extend (just add entries to the $known array
defined at the top).  It should be fairly performant as well, since it doesn't
do any iteratoin or recursion.

<?php
function browser_info($agent=null) {
 
// Declare known browsers to look for
 
$known = array('msie', 'firefox', 'safari', 'webkit', 'opera', 'netscape',
   
'konqueror', 'gecko');

 
// Clean up agent and build regex that matches phrases for known browsers
  // (e.g. "Firefox/2.0" or "MSIE 6.0" (This only matches the major and minor
  // version numbers.  E.g. "2.0.0.6" is parsed as simply "2.0"
 
$agent = strtolower($agent ? $agent : $_SERVER['HTTP_USER_AGENT']);
 
$pattern = '#(?<browser>' . join('|', $known) .
   
')[/ ]+(?<version>[0-9]+(?:\.[0-9]+)?)#';

 
// Find all phrases (or return empty array if none found)
 
if (!preg_match_all($pattern, $agent, $matches)) return array();

 
// Since some UAs have more than one phrase (e.g Firefox has a Gecko phrase,
  // Opera 7,8 have a MSIE phrase), use the last one found (the right-most one
  // in the UA).  That's usually the most correct.
 
$i = count($matches['browser'])-1;
  return array(
$matches['browser'][$i] => $matches['version'][$i]);
}
?>
This returns an array with the detected browser as the key, and the version as
the value, and also sets 'browser' and 'version' keys.  For example on Firefox
3.5:
<?php
$ua
= browser_info();
print_r($ua);
/* Yields ...
Array
(
    [firefox] => 3.5
    [browser] => firefox
    [version] => 3.5
)
*/

// Various browser tests you can do with the returned array ...
if ($ua['firefox']) ... // true
if ($ua['firefox'] > 3) ... // true
if ($ua['firefox'] > 4) ... // false
if ($ua['browser'] == 'firefox') ... // true
if ($ua['version'] > 3.5) ... // true
if ($ua['msie']) ... // false ('msie' key not defined)
if ($ua['opera'] > 3) ... // false ('opera' key not defined)
if ($ua['safari'] < 3) ... // false also ('safari' key not defined)
?>

Steve Perkins (22-Jun-2009 12:11)

This is a simple class to detect the client browser and version using regular expressions.

<?PHP
class Browser
{
    private
$props    = array("Version" => "0.0.0",
                               
"Name" => "unknown",
                               
"Agent" => "unknown") ;

    public function
__Construct()
    {
       
$browsers = array("firefox", "msie", "opera", "chrome", "safari",
                           
"mozilla", "seamonkey",    "konqueror", "netscape",
                           
"gecko", "navigator", "mosaic", "lynx", "amaya",
                           
"omniweb", "avant", "camino", "flock", "aol");

       
$this->Agent = strtolower($_SERVER['HTTP_USER_AGENT']);
        foreach(
$browsers as $browser)
        {
            if (
preg_match("#($browser)[/ ]?([0-9.]*)#", $this->Agent, $match))
            {
               
$this->Name = $match[1] ;
               
$this->Version = $match[2] ;
                break ;
            }
        }
    }

    public function
__Get($name)
    {
        if (!
array_key_exists($name, $this->props))
        {
            die
"No such property or function $name)" ;
        }
        return
$this->props[$name] ;
    }

    public function
__Set($name, $val)
    {
        if (!
array_key_exists($name, $this->props))
        {
           
SimpleError("No such property or function.", "Failed to set $name", $this->props) ;
            die ;
        }
       
$this->props[$name] = $val ;
    }

}

?>

example code
<?PHP
$browser
= new Browser ;
echo
"$Browser->Name $Browser->Version" ;
?>
result when client using Firefox 3.0.11
firefox 3.0.11

result when client using unknown browser
unknown 0.0.0
 
etc etc

Steve Perkins (21-Jun-2009 05:42)

This is a simple class to detect the client browser and version using regular expressions.

<?PHP
class Browser extends BaseObjects_PropertyArray
{
    private
$props    = array("Version" => "0.0.0",
                               
"Name" => "unknown",
                               
"Agent" => "unknown",
                               
"AllowsHeaderRedirect" => true) ;

    public function
__Construct()
    {
       
$browsers = array("firefox", "msie", "opera", "chrome", "safari",
                           
"mozilla", "seamonkey",    "konqueror", "netscape",
                           
"gecko", "navigator", "mosaic", "lynx", "amaya",
                           
"omniweb", "avant", "camino", "flock", "aol");

       
$this->Agent = strtolower($_SERVER['HTTP_USER_AGENT']);
        foreach(
$browsers as $browser)
        {
            if (
preg_match("#($browser)[/ ]?([0-9.]*)#", $this->Agent, $match))
            {
               
$this->Name = $match[1] ;
               
$this->Version = $match[2] ;
                break ;
            }
        }
       
$this->AllowsHeaderRedirect = !($this->Name == "msie" && $this->Version < 7) ;
    }

    public function
__Get($name)
    {
        if (!
array_key_exists($name, $this->props))
        {
            die
"No such property or function $name)" ;
        }
        return
$this->props[$name] ;
    }

}

?>

example code
<?PHP
$browser
= new Browser ;
echo
"$Browser->Name $Browser->Version" ;
?>
result when client using Firefox 3.0.11
firefox 3.0.11

result when client using unknown browser
unknown 0.0.0
 
etc etc

Mattkun Koder (28-Apr-2009 03:00)

If you want to use: ceo /a/ mmg5 /./ com 's improved version and STILL detect Google Chrome you need to move CHROME earlier on the list Before Safari otherwise it will be detected as safari.

    $browser_list = 'msie firefox chrome konqueror safari netscape navigator opera mosaic lynx amaya omniweb avant camino flock seamonkey aol mozilla gecko';

Daniel Frechette (17-Feb-2009 12:40)

A newer version for those only interested in identifying A-grade browsers. The code was ported in part from JQuery 1.3.1.

<?php
class Browser {
   
/**
        Figure out what browser is used, its version and the platform it is
        running on.

        The following code was ported in part from JQuery v1.3.1
    */
   
public static function detect() {
       
$userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);

       
// Identify the browser. Check Opera and Safari first in case of spoof. Let Google Chrome be identified as Safari.
       
if (preg_match('/opera/', $userAgent)) {
           
$name = 'opera';
        }
        elseif (
preg_match('/webkit/', $userAgent)) {
           
$name = 'safari';
        }
        elseif (
preg_match('/msie/', $userAgent)) {
           
$name = 'msie';
        }
        elseif (
preg_match('/mozilla/', $userAgent) && !preg_match('/compatible/', $userAgent)) {
           
$name = 'mozilla';
        }
        else {
           
$name = 'unrecognized';
        }

       
// What version?
       
if (preg_match('/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/', $userAgent, $matches)) {
           
$version = $matches[1];
        }
        else {
           
$version = 'unknown';
        }

       
// Running on what platform?
       
if (preg_match('/linux/', $userAgent)) {
           
$platform = 'linux';
        }
        elseif (
preg_match('/macintosh|mac os x/', $userAgent)) {
           
$platform = 'mac';
        }
        elseif (
preg_match('/windows|win32/', $userAgent)) {
           
$platform = 'windows';
        }
        else {
           
$platform = 'unrecognized';
        }

        return array(
           
'name'      => $name,
           
'version'   => $version,
           
'platform'  => $platform,
           
'userAgent' => $userAgent
       
);
    }
}

Usage:
$browser = TkBrowser::detect();
echo
'You browser is '.$browser['name'].' version '.$browser['version'].' running on '.$browser['platform'];
?>

Best regards,

Daniel

assadvirgo at gmail dot com (13-Feb-2009 12:40)

This is a very useful function to get user browser. A great utility function for those are fed up of get_browser() issues :)

<?php
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;
}
?>

jesdisciple [at] gmail -dawt- com (19-Nov-2007 04:13)

Use this to ensure that the costly call in its standard form never needs to be repeated:
<?php
function getBrowser(){
    static
$browser;//No accident can arise from depending on an unset variable.
   
if(!isset($browser)){
       
$browser = get_browser($_SERVER['HTTP_USER_AGENT']);
    }
    return
$browser;
}
?>

Steffen (19-Oct-2007 11:59)

Keep in mind that get_browser(); really slows down your application.  It takes about 22 ms to execute on an idle server with Ubuntu Linux, Apache 2, PHP 5.1.3.

digibrisk at gmail dot NOSPAM dot SPAMNO dot com (06-Oct-2007 01:20)

If the "browscap" directive isn't set in your server's php.ini, then an error warning is shown. Just in case, you could make a call to ini_get() to check if the browscap directive is set before using browser_get().

<?php
if(ini_get("browscap")) {
   
$browser = get_browse(null, true);
}
?>

mike at mike-griffiths dot co dot uk (23-Jul-2007 10:41)

You should not rely on just this for cross-browser compatibility issues.  Good practice would be to include HTML if-statements for IE stylesheets as well as dynamically checking the browser type.

ansar dot ahmed at impelsys dot com (22-Mar-2007 10:01)

We are using get_browser() function for useragent Mozilla/4.0 (compatible; MSIE 4.01; Windows NT) the get_browser function is returning as Default Browser and Platform = unknown.

So i added this to my browscap.ini manually:

[Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)]
Parent=IE 4.01
Platform=WinNT

sam (22-Oct-2006 11:09)

I thought this function might be useful to those without access to the php.ini file (such as those on a shared hosting system):

<?php
function php_get_browser($agent = NULL){
$agent=$agent?$agent:$_SERVER['HTTP_USER_AGENT'];
$yu=array();
$q_s=array("#\.#","#\*#","#\?#");
$q_r=array("\.",".*",".?");
$brows=parse_ini_file("php_browscap.ini",true);
foreach(
$brows as $k=>$t){
  if(
fnmatch($k,$agent)){
 
$yu['browser_name_pattern']=$k;
 
$pat=preg_replace($q_s,$q_r,$k);
 
$yu['browser_name_regex']=strtolower("^$pat$");
    foreach(
$brows as $g=>$r){
      if(
$t['Parent']==$g){
        foreach(
$brows as $a=>$b){
          if(
$r['Parent']==$a){
           
$yu=array_merge($yu,$b,$r,$t);
            foreach(
$yu as $d=>$z){
             
$l=strtolower($d);
             
$hu[$l]=$z;
            }
          }
        }
      }
    }
    break;
  }
}
return
$hu;
}
?>

define the location of php_browscap.ini wherever you want
always returns an array, same functionality as get_browser(NULL,true)
Hope someone finds it useful!

adspeed.com (02-Sep-2005 06:06)

Here is what we do to fix the parsing error messages for php_browscap.ini downloaded from Gary's website.

<?php
// fix the browsecap.ini for php
$v= file_get_contents('php_browscap.ini');
$v= preg_replace("/\r/","",$v);
$v= preg_replace('/="(.*)"/i','=\\1',$v);
$v= preg_replace("/platform=(.*)/i","platform=\"\\1\"",$v);
$v= preg_replace("/parent=(.*)/i","parent=\"\\1\"",$v);
$v= preg_replace("/minorver=(.*)/i","minorver=\"\\1\"",$v);
$v= preg_replace("/majorver=(.*)/i","majorver=\"\\1\"",$v);
$v= preg_replace("/version=(.*)/i","version=\"\\1\"",$v);
$v= preg_replace("/browser=(.*)/i","browser=\"\\1\"",$v);
$v= str_replace("[*]","*",$v);
file_put_contents('browscap.ini',$v);
?>

max at phpexpert dot de (26-Mar-2004 03: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 07: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 10: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 (04-Sep-2001 02: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/

nick at category4 dot com (13-Jun-2001 12: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 (31-Jul-2000 12: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.