사용자의 브라우저 정보나 OS정보가 너무 많아서 일일이 preg_match 함수로 정보를 추출하는게 쉬운일이 아닌것 같습니다. php에서는 get_browser함수를 제공하는데 이것으로 브라우저나 OS 정보를 추출할 수 있게 도와줍니다. 하지만 php에서는 기본적으로 제공하는게 아니다 보니 약간의 php.ini 설정을 해줄 필요가 있습니다.

[php_browscap.ini] 다운로드

browscap 을 찾아 php_browscap.ini 파일이 위치하는 경로를 적어줍니다. 설치경로가 C:/server/public_html/ 에 위치한다면 다음과 같이 설정하고 웹서버를 재시작해줍니다.

 [browscap]
 ; http://php.net/browscap
 ;browscap = extra/browscap.ini
 browscap = C:/server/public_html/php_browscap.ini

정상출력되는지 다음과 같이 테스트해봅니다.

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

 
$browser get_browser(nulltrue);
 
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
    [css] => 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 를 수정할 수 없는 문제라면 다음의 방법으로 정보를 가져 올 수 있겠습니다.

 <?php
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;
}



echo 
"<pre>"
;
print_r(getBrowser
());

?>


browscap 최신 버전은 [http://browscap.org/]에서 다운로드할 수 있습니다.