PHP - 向特定浏览器显示消息

4
我已经搜索了很多内容,但都远超我所需。我以前用JavaScript做过这个,但我真的更喜欢使用PHP。如何根据访问者使用的浏览器显示一条消息?
例如:
IE用户将看到:“您正在使用Internet Explorer”
Firefox用户将看到:“您正在使用Mozilla Firefox”
我不确定除IE、Firefox、Chrome、Safari和Opera之外是否还有其他主要浏览器。但我至少想针对这些浏览器中的每一个单独提供一条信息。谢谢。

2
完全与编程无关的语法细节:*你是 ;) - Amber
1
谢谢,通常我在这方面还是挺擅长的。嘿,看来我有点失误了。 - user
5个回答

6
要在服务器端识别用户的浏览器,您需要解析$_SERVER['HTTP_USER_AGENT']变量... 或者更好的方法是使用get_browser函数--请注意,您需要在php.ini中配置一些内容,否则您将会收到这种警告:
Warning: get_browser() [function.get-browser]: browscap ini directive not set

正如PHP手册所述:

注意:为了使其工作,php.ini中的browscap配置设置必须指向系统上browscap.ini文件的正确位置。browscap.ini未捆绑在PHP中,但您可以在此处找到最新的»php_browscap.ini文件。

虽然browscap.ini包含许多浏览器的信息,但它依赖于用户更新以保持数据库的最新状态。文件的格式相当易于理解。


下载该文件并将以下行添加到php.ini:

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

以下是代码部分:
var_dump(get_browser(null, true));

给我:
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)

在 Firefox 3.5 上;还有:
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)

在 Linux 版本的 Google Chrome 上,最近版本(4.0.203.2)——考虑到它似乎是某种夜间构建版本,它没有被识别,这很正常...
作为参考,这是它的用户代理字符串:
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)

这表明get_browser不错,但对于一些最新的测试浏览器可能并不完美 - 不过,我想它应该可以在大多数“常见”的浏览器上正常工作...

你从哪里得到这个输出的?我的意思是:'browser' => string 'Mozilla' (length=7) 不是正常的 print_r() 输出。 - Thiago Belem
@TiuTalk:我正在使用var_dump而不是print_r,并且我已经安装了Xdebug扩展(请参见http://xdebug.org/),它可以增强`var_dump`的输出 - 包括提供调试器、分析器等其他功能。 - Pascal MARTIN

2
大多数客户端都会发送一个用户代理字符串,您可以使用get_browser函数将该字符串“翻译”成更具“信息量”的内容。
但是客户端可以自由地发送任何字符串,例如将自己标识为Internet Explorer的Opera浏览器。

0

实际上,无法通过服务器端确定浏览器的能力,因为每个用户都可以操纵浏览器设置,从而获得不同的能力(例如禁用Java)。

你应该采用客户端和服务器端相结合的方式,有许多jscript库可以做到这一点,例如,链接文本


0

0

1
get_browser() 返回一个数组 ;-) - VolkerK
嗯...我同意 :) 可能是文档泄漏了?他们说如果第二个参数为true,get_browser会返回数组...以前我总是使用'get_browser(null, true)'的形式,因为总是需要一个数组。但现在我检查了一下,get_browser()返回相同的结果...太奇怪了。get_browser()、get_browser(null, true)和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')返回相同的结果。 - Alexey Sviridov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接