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