2017-03-04 149 views
1

我找到了一些PHP代碼的檢測,如果用戶是在Chrome:檢測用戶瀏覽器PHP

<?php 
    $b_name = get_browser_name($_SERVER['HTTP_USER_AGENT']); 

    function get_browser_name($user_agent){ 
     if (strpos($user_agent, 'Opera') || strpos($user_agent, 'OPR/')) return 'Opera'; 
     elseif (strpos($user_agent, 'Edge')) return 'Edge'; 
     elseif (strpos($user_agent, 'Chrome')) return 'Chrome'; 
     elseif (strpos($user_agent, 'Safari')) return 'Safari'; 
     elseif (strpos($user_agent, 'Firefox')) return 'Firefox'; 
     elseif (strpos($user_agent, 'MSIE') || strpos($user_agent, 'Trident/7')) return 'Internet Explorer'; 
     return 'Other'; 
    } 

    echo "You browser is <b>$b_name</b> ."; 

?> 

看來當我測試它的工作,但在部署時它似乎是放出大量的假用戶使用Chrome瀏覽器時出現的負面情況,但顯示的是Mozilla。

任何想法可能會出錯?還是這個好代碼?

+0

它實際上是從我的最後,不知道你是如何得到這個問題。 – Roljhon

+1

爲什麼不使用已經存在的函數http://php.net/manual/en/function.get-browser.php – Gamesh

+0

在這段代碼中你似乎沒有與Mozilla匹配。另請注意,所有用戶代理都以「兼容Mozilla的X」開頭,Chrome也可能在其中包含Safari。可以使用'MobileDetect'(我知道它主要是關於移動瀏覽器,但它也有用戶代理類型檢測作爲獎勵) – apokryfos

回答

1

如果你是在趕時間&一個非常快速響應的系統是不是一個嚴重要求現在,您可以使用:get_browser &然後用strpos()或使用regexp解析它。

爲了得到準確的結果與get_browser,請確保您採取以下建議的護理:

注: 爲了這個工作,在php.ini您browscap配置必須指向在系統上正確定位browscap.ini文件。 browscap.ini不與PHP捆綁在一起,但您可以在這裏找到最新的»php_browscap.ini文件。 雖然browscap.ini包含許多瀏覽器的信息,但它依賴於用戶更新來保持數據庫最新。該文件的格式是相當不言自明的。

但是,如果你正在尋找一個更可靠的解決方案,AS STATED HERE它能夠更好地使用這些軟件包中,只有一個倉庫:https://github.com/ThaDafinser/UserAgentParser

可以測試操作系統的速度,足夠大的列表/瀏覽器&準確性Here

2

爲什麼不使用內部php函數get_browser ??

get_browser - 告訴一下用戶的瀏覽器能夠

例如從manual

echo $_SERVER['HTTP_USER_AGENT'] . "\n\n"; 

$browser = get_browser(null, true); 
print_r($browser);