PHP - Display messages to certain browsers

十年热恋 提交于 2019-12-07 07:53:26

问题


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.


回答1:


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




回答2:


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.




回答3:


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




回答4:


&lt?php
  $browser = get_browser();
  echo 'You using '.$browser['browser'];
?&gt

more info at http://www.php.net/function.get-browser

you can get browscap.ini file here http://browsers.garykeith.com/downloads.asp




回答5:


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



来源:https://stackoverflow.com/questions/1372332/php-display-messages-to-certain-browsers

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!