본문으로 바로가기

원래는 $_SERVER['HTTP_USER_AGENT'] 써서 사용자의 브라우저 정보를 가져온다음

preg_match와 수많은 if문으로 브라우저 정보며 버젼이며 OS 정보며..

하나하나 찾아서 가져오는 함수를 사용했었는데 여간 번거로운일이 아니였다.


최근에 또 브라우저 정보를 가져와야해서

간절한 바람으로 누가 잘만들어놓은 함수가 있을꺼라며 구글링을 했는데

PHP 에서 get_browser 라는 함수가 있다는걸 발견.

하지만 PHP에서 기본적으로 제공하는게 아니라서 php_browscap.ini 을 다운로드 받고 php.ini 에서 설정을 해줘야 한다.


1. php_browscap.ini 다운로드 : [다운로드]

2. php_browscap.ini 다운로드 받은 경로 기억해뒀다가,

만약 다운로드 받아놓은 경로거 c:/server/php/ 이라면 php.ini에 다음과 같이 설정


[browscap]
browscap = C:/server/php/php_browscap.ini


3. 아파치 재시작

4. 그리고 다음과같이 get_browser를 사용하면 결과를 확인할 수 있다


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

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

결과 : 

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] =>

)


만약 php.ini 을 수정할 수 없는 상황이라면 다음과 같이 사용도 가능하다고 한다


function getBrowser() 
{ 
    $agent = $_SERVER['HTTP_USER_AGENT']; 

    $raw = array(); 
    $brows = parse_ini_file(dirname(__FILE__) . "/php_browscap.ini",
     true); 

    foreach($brows as $k=>$v) 
    { 
        if(fnmatch($k, $agent)) 
        { 
            $raw['browser_name_pattern'] = $k; 
            $regex = preg_replace( 
                array("/\./", "/\*/", "/\?/"), 
                array("\.", ".*", ".?"), 
                $k 
            ); 
            $raw['browser_name_regex'] = strtolower("^$regex$"); 

            foreach($brows as $j=>$p) 
            { 
                if($v['Parent'] == $j) 
                { 
                    foreach($brows as $q=>$r) 
                    { 
                        if($p['Parent'] == $q) 
                        { 
                            $raw = array_merge($raw, $r, $p, $v); 
                            foreach($raw as $d=>$z) 
                            { 
                                $i = strtolower($d); 
                                $list[$i] = $z; 
                            } 
                        } 
                    } 
                } 
            } 
            break; 
        } 
    } 
    return $list; 
}

print_r(getBrowser()); 


참고사이트

http://php.net/manual/en/function.get-browser.php

http://blog.habonyphp.com/413#.VXZXrM94s-U

http://blog.nlinux.com/72