views:

297

answers:

5

I've searched for this and everything I find is way more than I need. I've done this in JavaScript before, but I would really prefer using PHP. How would I go about displaying a message to my visitors, depending on which browser they're using?

Example:

IE User would see: "You're using Internet Explorer"

Firefox User would see: "You're using Mozilla Firefox"

I'm not exactly sure if there are other major browsers besides IE, Firefox, Chrome, Safari, and Opera. But I would at least want to have a message directed to each one of those browsers individually. Thank you.

+2  A: 

Most clients send a user agent string and you can use get_browser to "translate" that string into something more "informative".
But hte client is free to send any string it wants, e.g. opera browsers that identify themselves as internet explorer.

VolkerK
+3  A: 

Hi,

To identify the user's browser server-side, you'll have to parse the $_SERVER['HTTP_USER_AGENT'] variable...


... Or, probably better, use the get_browser function -- just note you'll have to configure something in php.ini, or you'll get this kind of warning :

Warning: get_browser() [function.get-browser]: browscap ini directive not set

Like the PHP manual page says :

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.


After downloading that file and adding this line to php.ini :

browscap = /home/squale/developpement/tests/temp/php_browscap.ini

The following portion of code :

var_dump(get_browser(null, true));

Gives me :

array
  'browser_name_regex' => string '^mozilla/5\.0 (x11; .*linux.*; .*rv:1\.9.*) gecko/.*$' (length=53)
  'browser_name_pattern' => string 'Mozilla/5.0 (X11; *Linux*; *rv:1.9*) Gecko/*' (length=44)
  'parent' => string 'Mozilla 1.9' (length=11)
  'platform' => string 'Linux' (length=5)
  'browser' => string 'Mozilla' (length=7)
  'version' => string '1.9' (length=3)
  'majorver' => string '1' (length=1)
  'minorver' => string '9' (length=1)
  'alpha' => string '1' (length=1)
  'frames' => string '1' (length=1)
  'iframes' => string '1' (length=1)
  'tables' => string '1' (length=1)
  'cookies' => string '1' (length=1)
  'javaapplets' => string '1' (length=1)
  'javascript' => string '1' (length=1)
  'cssversion' => string '2' (length=1)
  'supportscss' => string '1' (length=1)
  'beta' => string '' (length=0)
  'win16' => string '' (length=0)
  'win32' => string '' (length=0)
  'win64' => string '' (length=0)
  'backgroundsounds' => string '' (length=0)
  'cdf' => string '' (length=0)
  'vbscript' => string '' (length=0)
  'activexcontrols' => string '' (length=0)
  'isbanned' => string '' (length=0)
  'ismobiledevice' => string '' (length=0)
  'issyndicationreader' => string '' (length=0)
  'crawler' => string '' (length=0)
  'aol' => string '' (length=0)
  'aolversion' => string '0' (length=1)

on firefox 3.5 ; and :

array
  'browser_name_regex' => string '^.*$' (length=4)
  'browser_name_pattern' => string '*' (length=1)
  'browser' => string 'Default Browser' (length=15)
  'version' => string '0' (length=1)
  'majorver' => string '0' (length=1)
  'minorver' => string '0' (length=1)
  'platform' => string 'unknown' (length=7)
  'alpha' => string '' (length=0)
  ....
  'aol' => string '' (length=0)
  'aolversion' => string '0' (length=1)

On a recent version (4.0.203.2) of google chrome for Linux -- well, considering it's some kind of nightly build, I suppose it's normal that it's not recognized...

As a reference, here is it's user-agent string :

string 'Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.203.2 Safari/532.0' (length=109)


This show that get_browser is nice ; but maybe not perfect for some cutting-edge test browser -- still, should work fine with most "common" browsers, I suppose...

Pascal MARTIN
Who did you get this output? I mean: `'browser' => string 'Mozilla' (length=7)` is not the normal `print_r()` output.
TiuTalk
@TiuTalk : I'm using `var_dump`, and not `print_r`, and I have the Xdebug extension installed (see http://xdebug.org/ ), which enhances the output of `var_dump` -- amongst other things, like providing a debugger, a profiler, ...
Pascal MARTIN
A: 

I think the only way to detect browser in PHP is from user agent, from HTTP_USER_AGENT.

Or using PHP function get_browser() -> http://us3.php.net/function.get-browser

Fu4ny
A: 
Alexey Sviridov
get_browser() returns an array ;-)
VolkerK
Hmm... i'm agree :) May be it's leak in documentation? They say get_browser return array if second param is true... Before i'm always use it in form 'get_browser(null, true)' becase always need an array. but now i'm check and get_browser() return same result... so strange.get_browser(), get_browser(null, true) and get_browser('Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.2) Gecko/20090803 Ubuntu/9.04 (jaunty) Shiretoko/3.5.2 FirePHP/0.3') return same results
Alexey Sviridov
A: 

There is actually no good way to determine browser capabilities server-side, since each user, regardless to his browser version can manipulate the browser settings thus getting different capabilities(disabling Java for example).

you should resort to client side combined with server side,there are many jscript libraries out there that can do this, for example, link text

MindFold