2009-09-03 92 views
4

我已经搜索过这个,我发现的一切都比我需要的方式。我之前在JavaScript中做过这些,但我真的更喜欢使用PHP。我怎么去显示一条消息给我的访问者,取决于他们使用的浏览器?PHP - 显示消息到某些浏览器

例子:

IE用户将看到: “你正在使用Internet Explorer”

火狐用户将看到: “你使用Mozilla Firefox”

我不太确定如果除IE,Firefox,Chrome,Safari和Opera之外还有其他主流浏览器。但我至少希望分别向这些浏览器中的每一个发送消息。谢谢。

+2

完全偏离主题的语法挑剔:*你;) – Amber 2009-09-03 09:18:12

+1

谢谢,通常我很好。嘿。猜猜我滑倒了。 – user 2009-09-03 09:27:02

回答

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) 
f上的

irefox 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) 

在最近的谷歌浏览器的版本(4.0.203.2)用于Linux的 - 嗯,认为这是某种每晚构建的,我想这是正常的,它不承认...

作为参考,这里是它的用户代理字符串:

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 is美观大方;但也许不是完美的一些尖端测试浏览器 - 尽管如此,能很好地工作最“普通”的浏览器,我想...

+0

你是谁?我的意思是:' '浏览器'=>字符串'Mozilla的(长度= 7)'是不正常的'的print_r()'输出。 – 2010-02-13 13:25:18

+0

@TiuTalk:我使用'var_dump',而不是'print_r',我已经安装了Xdebug扩展(见http://xdebug.org/),从而增强var_dump'的'输出 - 除其他事项外,如提供一个调试器,分析器,... – 2010-02-13 15:47:02

2

大多数客户发送一个user agent字符串,您可以使用get_browser将该字符串“翻译”为更具“信息性”的内容。
但是客户端可以自由发送任何想要的字符串,例如将自己标识为Internet Explorer的Opera浏览器。

0
 
<?php 
    $browser = get_browser(); 
    echo 'You using '.$browser['browser']; 
?> 

更多信息以http://www.php.net/function.get-browser

,你可以在这里http://browsers.garykeith.com/downloads.asp

+1

get_browser()返回一个数组;-) – VolkerK 2009-09-03 09:30:54

+0

嗯......我同意:)可能是它在文件泄露?他们说get_browser返回数组,如果第二个参数是真的......我之前我总是在表单中使用它的get_browser(NULL,TRUE)“becase的总是需要一个数组。但现在我是支票和get_browser()返回相同的结果...很奇怪。 (Mozilla/5.0(X11; U; Linux x86_64; en-US; rv:1.9.1.2)Gecko/20090803 Ubuntu/9.04(jaunty)知床/ 3.5。 2 FirePHP/0.3')返回相同的结果 – 2009-09-03 16:18:12

0

browscap.ini文件其实是有确定没有什么好办法浏览器功能服务器端,因为每个用户,无论他的浏览器版本可以操纵浏览器设置,从而获得不同的功能(例如禁用Java)。

你应该诉诸于客户端与服务器端的结合,也有很多的JScript库,在那里,可以做到这一点,例如,link text