PHP & Others

폰 헤더 정보를 보고 이통사, 브라우저, 마크업 랭귀지 구별 정리 by 김주웅

페이지 정보

본문

jsp 로 된 것을 php로 옮긴 것입니다.

폰 헤더 (phone header) 정보를 보고 이통사(telecom)나 사용하는 브라우저(browser) 및 마크업(markup) 랭귀지를 구별하는 것입니다.

부족한 부분이 많이 있는 줄 압니다.

그래도 매번 이거 때문에 고생하시는 분들에게 조금이나마 도움이 되었으면 합니다.

<?
## php가 모듈로 설치된 환경에서만 사용 가능하다
## 윈도우즈용 php 를 설치한 경우 되지 않음을 확인

$headers = getallheaders();


## 기본 정보를 얻는다.
$user_agent = $headers["User-Agent"];
$phoneNumber = $headers["HTTP_PHONE_NUMBER"];                                        #핸드폰 번호. 핸드폰에 따라 없
을 수도 있다. (바로 있는 경우는 KTF)
$platformInfo = $headers["HTTP_PLATFORM_INFO"];                                        #플랫폼 정보: 내장된 Virtual 
Machine 정보
$subNo = $headers["x-up-subno"];                                                                #UP 브
라우저 일 경우 키 값이 될 만한 것
$more = $headers["cookie"];

$phoneKey = $phoneNumber;                                                                       
        #핸드폰 고유 문자열 (기본값은 phoneNumber 이나, 브라우저와 통신사에 따라 다른 값이 들어갈 수도 있다.)

/*
## 화면에 기본 정보를 출력 (주의! 아래 출력은 html 을 지원하는 단말기에서만 보인다. 기타 wml, hdml 계열에서는 에러!
echo "HEADER INFO.<br>";
echo "---------------<br>";
echo "USER_AGENT: $user_agent<br>";
echo "PHONENUMBER: $phoneNumber<br>";
echo "PLATFORMINFO: $platformInfo<br>";
echo "SUBNO: $subNo<br>";
echo "MORE: $more<br>";
echo "---------------<br>";
*/

## 브라우저, 마크업랭귀지, 이동통신사를 집어 넣기 위한 기본 변수 선언과 초기화

$browser = "browser?";                        #이후 코드에
서 "KUN", "ME", "IE", "Netscape", "Firefox"..., "UP", "NATEm", "AUR"로 갈라지게 된다. 못찾으면 기본값
$markup  = "markup?";                        #이후 코드에서 "khtml"(쿤),"chtml"(ME), "html"(IE,Netscape, 
Firefox), "hdml", "wml", "skwml" 로 갈라진다. 못찾으면 기본값
$company = "company?";                        #이후 코드에서 "KTF", "SKT", "LGT", "None" 으로 갈라진다.


if( strpos($user_agent, "Mozilla") !==false ) {

        ##############################################################################################
        $browser = "Mozilla";                                                        #모질라(Mozilla) 계열
        $company = "KTF";                                                                #모질라 계열을 사용
하는 통신사는 KTF 이다

        if( strpos($user_agent, "KUN") !==false )
        {
                $browser = "KUN";                                                        #쿤 브라우저 (KUN 
Browser)
                $markup  = "khtml";                                                        #KUN의 html을 
khtml
        } elseif( strpos($user_agent, "MSMB") !==false ) {
                $browser = "ME";                                                        #모빌 익스플로러 
(Mobile Explorer)
                $markup  = "chtml";                                                        #ME의 html을 
chtml
        } else {

                #이하 모바일용 브라우저가 아니다
                #제일 많은 사람들이 사용하는 인터넷익스플로러, 파이어폭스, 오페라, 사파리(애플계열?), 넷스케이프 등이 있고
                #웹 페이지 검색을 위해 접근하는 검색 Bot 도 여기에 걸릴 수 있다. ( reference: 
http://en.wikipedia.org/wiki/User-Agent )
                $company = "None";

                if( strpos($user_agent, "MSIE") !==false )
                {
                        $browser = "IE";                                                #인터넷 익스플로러 
(Microsoft Internet Explorer)

                } elseif( strpos($user_agent, "Firefox") !==false ) {
                        $browser = "Firefox";                                        #파이어 폭스

                } elseif( strpos($user_agent, "Netscape") !==false ) {
                        $browser = "Netscape";                                        #넷스케이프

                } elseif( strpos($user_agent, "Opera") !==false  ) {
                        $browser = "Opera";                                                #오페라

                } elseif( strpos($user_agent, "Safari") !==false ) {
                        $browser = "Safari";                                        #사파리

                } else {
                        $browser = "Mozilla";
                }

                $markup  = "html";                                                        #일반 html
        }

} else {

        ##############################################################################################
        $browser = "Non-Mozilla";                                                #비 모질라(Non-Mozilla) 계열

        if(strpos($user_agent, "UP.Browser") !==false) {                #유피 브라우저 (UP Browser)
                $browser = "UP";

                #UP Browser에는 폰번호가 없다. 따라서 폰 키로 사용할 만한 키가 $subNo 가 된다.
                $phoneKey = $subNo;

                if(strpos($subNo, "airnet019") === false)        #airnet019 가 없으면 SKT, 있으면 LGT
                        $company = "SKT";
                else
                        $company = "LGT";

                $index = strpos($user_agent, "UP.Browser") + strlen("UP.Browser/");

                ## LGT 이거나 UP 버전이 3.1 이하 3.0, 2.x 일 경우에는 hdml
                if( strcmp( substr($user_agent, $index, 3), "3.1" ) <=0 || !strcmp( $company, "LGT" ) )
                {
                        $markup = "hdml";                                                #HDML (version 
3.1 or less)
                } else {
                        $markup = "wml";                                                #WML (version 4.0 
or more)
                }

        } else {
                #UP 브라우저도 아닌 경우

                if( !strcmp( substr($user_agent, 0, 1), "0" ) || !strcmp( substr($user_agent, 0, 1), "S" ) )        #NATE mBrowser
                {
                        $browser = "NATEm";
                        $company = "SKT";

                        #$user_agent가 0 으로 시작하는 경우
                        if( !strcmp( substr($user_agent, 0, 1), "0" ) )
                        {
                                $phoneKey = substr($user_agent, 0, 3) . substr($user_agent, 25, 8);        ## 33-25=8

                        } else {
                        #$user_agent가 S 로 시작하는 경우

                                #SKT일 경우 폰번호 011, SKI 일 경우 017
                                if( !strcmp( substr($user_agent, 0, 3), "SKT" ) ) $phoneKey = "011" . substr
($user_agent, 25, 8); ## 33-25=8
                                if( !strcmp( substr($user_agent, 0, 3), "SKI" ) ) $phoneKey = "017" . substr
($user_agent, 25, 8); ## 33-25=8
                        }

                        if( !strcmp( substr($user_agent, 5, 2), "SK" ) ) #7-5=2
                                $markup = "skwml";                                        #SKWML
                        else
                                $markup = "wml";                                        #WML (general)

                } elseif( strlen($user_agent) >= 48 ) {                                               
                                                                        #AUR Browser

                        $browser = "AUR";

                        if( strlen($user_agent) == 48 )                #old version
                                $phoneKey = substr($user_agent, 28, 11);  #39-28=11
                        else
                                $phoneKey = substr($user_agent, 32, 11); #43-32=11


                        $temp = substr($user_agent, 0, 1);

                        if( !strcmp( $temp, "1" ) )
                        {
                                $company = "LGT";
                                $markup = "WML";
                        } elseif( !strcmp( $temp, "2" ) ) {
                                $company = "SKT";
                                $markup = "WML";
                        } elseif( !strcmp( $temp, "3" ) ) {
                                $company = "KTF";
                                $markup = "chtml";
                        } else {
                                #죽도 밥도 아닌 경우 1
                        }
                } else {
                        #죽도 밥도 아닌 경우 2
                        #웹 페이지 검색을 위해 접근하는 검색 Bot 여기에 걸릴 수 있다. ( reference: 
http://en.wikipedia.org/wiki/User-Agent )
                }
        }
}



$fp = fopen("./rawHeader.info", "a");
if($fp)
{

        fwrite($fp, "-----------------------------------------------------------------------\\n");
        ## 모든 클라이언트 헤더 값을 인쇄해 본다.
        while( list($header, $value) = each($headers) )
        {
                fwrite($fp, "$header: $value\\n");
        }

        fwrite($fp, "\\nUSER_AGENT: $user_agent\\n");
        fwrite($fp, "PHONENUMBER: $phoneNumber\\n");
        fwrite($fp, "PLATFORMINFO: $platformInfo\\n");
        fwrite($fp, "SUBNO: $subNo\\n");
        fwrite($fp, "MORE: $more\\n");
        fwrite($fp, "Browser: $browser\\n");
        fwrite($fp, "Markup: $markup\\n");
        fwrite($fp, "Company: $company\\n");
        fwrite($fp, "PhoneKey: $phoneKey\\n");
}

fclose($fp);



if( strpos( $markup, "html" ) !==false)
{
        echo "RETRIEVE INFO.<br>";
        echo "---------------<br>";
        echo "browser: $browser<br>";
        echo "markup: $markup<br>";
        echo "company: $company<br>";
        echo "phoneKey: $phoneKey<br>";
        echo "---------------<br>";
} elseif( strpos( $markup, "hdml" )!==false) {

        echo "<HDML version=\\"3.0\\">";
        echo "<display>";
                echo "RETRIEVE INFO.<br/>";
                echo "---------------<br/>";
                echo "browser: $browser<br/>";
                echo "markup: $markup<br/>";
                echo "company: $company<br/>";
                echo "phoneKey: $phoneKey<br/>";
                echo "---------------<br/>";
        echo "</display>";
        echo "</HDML>";

} elseif( strpos( $markup, "wml" ) !==false) {
        echo "<WML>";
        echo "<card>";
                echo "RETRIEVE INFO.<br/>";
                echo "---------------<br/>";
                echo "browser: $browser<br/>";
                echo "markup: $markup<br/>";
                echo "company: $company<br/>";
                echo "phoneKey: $phoneKey<br/>";
                echo "---------------<br/>";
        echo "</card>";
        echo "</WML>";
} #end if


?>

관련자료

등록된 댓글이 없습니다.
Today's proverb
아무리 친한 사이라도 둘 사이를 파괴하고 싶지 않으면, 그리고 오래 지속시키고 싶으면, 어느 정도의 예의는 필요한 법이다. (필립 체스터필드의 “내 아들아 너는 인생을 이렇게 살아라” 중에서)