2010-02-04 27 views
5

Làm cách nào để có tên trình duyệt bằng PHP? Tôi nghĩ điều này sẽ đơn giản? Tất cả những gì tôi cần làm là phân biệt giữa IE và Firefox.PHP: lấy tên trình duyệt

+0

Mặc dù hoàn toàn có thể nhận được giá trị (như được mô tả trong các câu trả lời bên dưới) cho trình duyệt, bạn nên lưu ý rằng giá trị này không nhất thiết phải chính xác. – dnagirl

+0

** Bản sao của http://stackoverflow.com/questions/1895727/how-can-i-detect-the-browser-with-php-or-javascript/** –

Trả lời

16
if (strpos($_SERVER['HTTP_USER_AGENT'], '(compatible; MSIE ')!==FALSE) { 
    ...ie specific... 
} 

Nhưng! Không!

Hiếm khi có lý do chính đáng để đánh hơi tác nhân người dùng ở phía máy chủ. Nó mang đến một loạt các vấn đề, bao gồm:

  • trình duyệt và sử dụng các đại lý khác mà nói dối về việc họ là ai, hoặc dải tiêu đề user-agent hoàn toàn, hay nói chung là làm cho nó khó có thể phân biệt những gì các trình duyệt thực sự là từ văn bản tiêu đề. Ví dụ, quy tắc trên cũng sẽ phát hiện Opera khi trình duyệt giả mạo IE và IEMobile (Windows Mobile), mà bạn có thể hoặc không muốn vì nó là một trình duyệt rất khác với IE trên máy tính để bàn.

  • nếu bạn phân biệt đối tác người dùng ở phía máy chủ, bạn phải trả lại tiêu đề Vary: User-Agent trong phản hồi, nếu không proxy có thể lưu lại phiên bản của trang và trả lại cho các trình duyệt khác không khớp. Tuy nhiên, bao gồm cả tiêu đề này có tác dụng phụ của rối tung lên bộ nhớ đệm trong IE.

Tùy thuộc vào những gì nó là bạn đang cố gắng để đạt được, đó là hầu như luôn luôn là một cách tốt hơn xử lý những khác biệt giữa IE và các trình duyệt khác tại phía khách hàng, sử dụng CSS hacks, JScript hoặc conditional comments. Mục đích thực sự của việc cố gắng phát hiện IE trong trường hợp của bạn là gì?

+0

Chính xác. Nếu bạn cURL với; 'CURLOPT_USERAGENT ('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.17 (KHTML, như Gecko) Phiên bản/6.0.2 Safari/536.26.17');' và poof nó bị giả mạo :) –

7

$ _SERVER [ 'HTTP_USER_AGENT']

7
<?php 
var_dump($_SERVER['HTTP_USER_AGENT']); 
var_dump(get_browser(null, true)); 
?> 

Prints:

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3 

Array 
(
    [browser_name_regex] => ^mozilla/5\.0 (windows; .; windows nt 5\.1; .*rv:.*) gecko/.* firefox/0\.9.*$ 
    [browser_name_pattern] => Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:*) Gecko/* Firefox/0.9* 
    [parent] => Firefox 0.9 
    [platform] => WinXP 
    [browser] => Firefox 
    [version] => 0.9 
    [majorver] => 0 
    [minorver] => 9 
    [cssversion] => 2 
    [frames] => 1 
    [iframes] => 1 
    [tables] => 1 
    [cookies] => 1 
    [backgroundsounds] => 
    [vbscript] => 
    [javascript] => 1 
    [javaapplets] => 1 
    [activexcontrols] => 
    [cdf] => 
    [aol] => 
    [beta] => 1 
    [win16] => 
    [crawler] => 
    [stripper] => 
    [wap] => 
    [netclr] => 
) 
1

1) dò chính xác: BrowserDetection.php (Examples)

2) nguyên thủy chức năng:

function get_user_browser() 
{ 
    $u_agent = $_SERVER['HTTP_USER_AGENT'];  $ub = ''; 
    if(preg_match('/MSIE/i',$u_agent))   { $ub = "ie";  } 
    elseif(preg_match('/Firefox/i',$u_agent)) { $ub = "firefox"; } 
    elseif(preg_match('/Safari/i',$u_agent)) { $ub = "safari"; } 
    elseif(preg_match('/Chrome/i',$u_agent)) { $ub = "chrome"; } 
    elseif(preg_match('/Flock/i',$u_agent)) { $ub = "flock";  } 
    elseif(preg_match('/Opera/i',$u_agent)) { $ub = "opera";  } 
    return $ub; 
} 
+0

nhờ làm việc hoàn hảo ! –

8

Hãy thử mã này ...

<?php 
function getBrowser() 
{ 
    $u_agent = $_SERVER['HTTP_USER_AGENT']; 
    $bname = 'Unknown'; 
    $platform = 'Unknown'; 
    $version= ""; 

    //First get the platform? 
    if (preg_match('/linux/i', $u_agent)) { 
     $platform = 'linux'; 
    } 
    elseif (preg_match('/macintosh|mac os x/i', $u_agent)) { 
     $platform = 'mac'; 
    } 
    elseif (preg_match('/windows|win32/i', $u_agent)) { 
     $platform = 'windows'; 
    } 

    // Next get the name of the useragent yes seperately and for good reason 
    if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent)) 
    { 
     $bname = 'Internet Explorer'; 
     $ub = "MSIE"; 
    } 
    elseif(preg_match('/Firefox/i',$u_agent)) 
    { 
     $bname = 'Mozilla Firefox'; 
     $ub = "Firefox"; 
    } 
    elseif(preg_match('/Chrome/i',$u_agent)) 
    { 
     $bname = 'Google Chrome'; 
     $ub = "Chrome"; 
    } 
    elseif(preg_match('/Safari/i',$u_agent)) 
    { 
     $bname = 'Apple Safari'; 
     $ub = "Safari"; 
    } 
    elseif(preg_match('/Opera/i',$u_agent)) 
    { 
     $bname = 'Opera'; 
     $ub = "Opera"; 
    } 
    elseif(preg_match('/Netscape/i',$u_agent)) 
    { 
     $bname = 'Netscape'; 
     $ub = "Netscape"; 
    } 

    // finally get the correct version number 
    $known = array('Version', $ub, 'other'); 
    $pattern = '#(?<browser>' . join('|', $known) . 
    ')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#'; 
    if (!preg_match_all($pattern, $u_agent, $matches)) { 
     // we have no matching number just continue 
    } 

    // see how many we have 
    $i = count($matches['browser']); 
    if ($i != 1) { 
     //we will have two since we are not using 'other' argument yet 
     //see if version is before or after the name 
     if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){ 
      $version= $matches['version'][0]; 
     } 
     else { 
      $version= $matches['version'][1]; 
     } 
    } 
    else { 
     $version= $matches['version'][0]; 
    } 

    // check if we have a number 
    if ($version==null || $version=="") {$version="?";} 

    return array(
     'userAgent' => $u_agent, 
     'name'  => $bname, 
     'version' => $version, 
     'platform' => $platform, 
     'pattern' => $pattern 
    ); 
} 

// now try it 
$ua=getBrowser(); 
$yourbrowser= "Your browser: " . $ua['name']; 
echo $yourbrowser; 

?> 


Output của Firefox

Mozilla Firefox 
Các vấn đề liên quan