2009-09-03 57 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

相關問題