모두와 나누는 웹개발 노트

share and care with love.

PHP & Laravel

[PHP] PHP로 브라우저 알아내기

mere hope 2011. 6. 10. 22:47
방문자의 브라우저 종류를 알아내는 것은 웹개발을 하는데 있어 필수사항이다. 요즘들어 표준을 준수하는 추세에 따라 많은 브라우저 같의 차이가 좁아지고 있지만, 아직도 Internet Explorer 6로 대표되는 구시대 브라우저를 사용하는 방문자가 많다. 예를들어 2011년 5월 31일 기준으로 대한민국 인터넷 사용자의 22.3%가 IE6를 쓰고 있으며, 이는 전세계에서 중국에 이어 두번째로 높은 비율이다 (http://www.theie6countdown.com/). 

구시대 브라우저는 보안도 문제지만, 최신 표준으로 규정된 웹 기술의 상당부분을 구현하지 못한다. 뿐만 아니라 최신 버전의 브라우저라 할지라도 같은 페이지를 출력한 결과물에 각각 크고작은 차이를 보인다. 따라서 웹개발자는 하나의 웹사이트를 다양한 버전으로 만들지 않을 수 없기에 방문자의 브라우저가 무엇인지 알아내는 것은 슬프지만 간과할 수 없는 부분이다.

여기서는 PHP 함수를 이용해 간단히 브라우저 종류를 알아내는 방법을 소개한다.

1)  아래의 코드를 원하는 부분에 추가한다.
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 = '#(?' . join('|', $known) .
    ')[/ ]+(?[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);
}

2) 브라우저 정보가 필요한 곳에 아래와 같이 적용한다.
$ua = getBrowser();
if($ua[name] == 'Internet Explorer' && $ua[version] < 8) { echo 'Internet Explorer 8 이하의 버전을 사용하고 계십니다'; }

getBrowser() 함수를 요청해서 $ua 변수에 넣으면,
  • $ua[userAgent] : 유저에이전트 정보.
  • $ua[name] : 브라우저 이름.
  • $ua[version] : 브라우저 버전.
  • $ua[platform] : 구동 플랫폼.
  • $ua[pattern] : 패턴.
위와 같은 정보를 얻을 수 있다.




 
반응형
LIST