폰 헤더 정보를 보고 이통사, 브라우저, 마크업 랭귀지 구별 정리 by 김주웅
컨텐츠 정보
- 21,649 조회
- 39 추천
- 목록
본문
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
?>
폰 헤더 (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
?>
관련자료
-
링크
댓글 0
등록된 댓글이 없습니다.