관련작업을 하다가 검색을 통해 구현해봤습니다.
쓰일일이 잘 없겠지만, 국가별경우 제어하는 경우는 생길수 있어 응용하시면 되겠습니다.
알고리즘은 매우간단합니다. 전세계 ip 범위에 따른 국가명 파일인 csv 파일을 db에 저장한후 실제아이피와 비교하면 간단하겠습니다.
아래경로에서 csv파일을 받습니다.
http://ip-to-country.webhosting.info/node/view/6
그리고 아래 소스나갑니다.
<?
mysql_query("
CREATE TABLE `ip2c` (
`start` int(10) unsigned NOT NULL default '0',
`end` int(10) unsigned NOT NULL default '0',
`a2` char(2) NOT NULL default '',
`a3` char(3) NOT NULL default '',
`country` varchar(100) NOT NULL default '',
PRIMARY KEY (`start`,`end`)
);
");
$lines=file('./ip-to-country.csv');
foreach($lines as $line){
$line=trim($line);
if(!preg_match('/^"([0-9]+)","([0-9]+)","(.{2})","(.{3})","(.*)"$/',$line,$matches)){
echo "error";
}else{
mysql_query('insert into ip2c values("'.($matches[1]).'","'.($matches[2]).'","'.($matches[3]).'","'.($matches[4]).'","'.($matches[5]).'");') or die(mysql_error());
}
}
?>
위 소스는 위 사이트 댓글에 나와있는 소스인데, 한번 실행주고 나면 필요없습니다.
그런후, 아래함수를 통해 국가 이미지를 추출해낼수 있겠습니다.
function flag($ip){
$re_flag=mysql_fetch_array(mysql_query("select a2 from ip2c where start<='$ip' and end>='$ip'"));//2자,3자,전체에따라 a2,a3,country
if($re_flag[a2]) $flag=$re_flag[a2];
else $flag="kr";
return $flag;
}
//예제
$expip=explode(".",$ip);
$flag=flag(($expip[0]*256*256*256)+($expip[1]*256*256)+($expip[2]*256)+$expip[3]);
$flagimg="<img src=\"국가이미지경로/".strtolower($flag).".png\" align='absmiddle'>";
echo $flagimg;
참고로 위소스는 국가이미지가 소문자 2자로 나오는경우(a2)입니다. 국가이미지를 어디서 받았는지 기억이 없어서;;;
검색하시면 전체이름으로 나오는 국가이미지도 있으니, 그에맞게 하시면 되겠습니다.
참고로, 쿼리문에서 a2는 2자국가명,a3는 3자국가명, country는 전체국가명입니다.
** 부호반대로 준거 수정 ㅡ.ㅡ<div class='small'>[이 게시물은 관리자님에 의해 2011-10-31 17:16:08 PHP & HTML에서 이동 됨]</div>
쓰일일이 잘 없겠지만, 국가별경우 제어하는 경우는 생길수 있어 응용하시면 되겠습니다.
알고리즘은 매우간단합니다. 전세계 ip 범위에 따른 국가명 파일인 csv 파일을 db에 저장한후 실제아이피와 비교하면 간단하겠습니다.
아래경로에서 csv파일을 받습니다.
http://ip-to-country.webhosting.info/node/view/6
그리고 아래 소스나갑니다.
<?
mysql_query("
CREATE TABLE `ip2c` (
`start` int(10) unsigned NOT NULL default '0',
`end` int(10) unsigned NOT NULL default '0',
`a2` char(2) NOT NULL default '',
`a3` char(3) NOT NULL default '',
`country` varchar(100) NOT NULL default '',
PRIMARY KEY (`start`,`end`)
);
");
$lines=file('./ip-to-country.csv');
foreach($lines as $line){
$line=trim($line);
if(!preg_match('/^"([0-9]+)","([0-9]+)","(.{2})","(.{3})","(.*)"$/',$line,$matches)){
echo "error";
}else{
mysql_query('insert into ip2c values("'.($matches[1]).'","'.($matches[2]).'","'.($matches[3]).'","'.($matches[4]).'","'.($matches[5]).'");') or die(mysql_error());
}
}
?>
위 소스는 위 사이트 댓글에 나와있는 소스인데, 한번 실행주고 나면 필요없습니다.
그런후, 아래함수를 통해 국가 이미지를 추출해낼수 있겠습니다.
function flag($ip){
$re_flag=mysql_fetch_array(mysql_query("select a2 from ip2c where start<='$ip' and end>='$ip'"));//2자,3자,전체에따라 a2,a3,country
if($re_flag[a2]) $flag=$re_flag[a2];
else $flag="kr";
return $flag;
}
//예제
$expip=explode(".",$ip);
$flag=flag(($expip[0]*256*256*256)+($expip[1]*256*256)+($expip[2]*256)+$expip[3]);
$flagimg="<img src=\"국가이미지경로/".strtolower($flag).".png\" align='absmiddle'>";
echo $flagimg;
참고로 위소스는 국가이미지가 소문자 2자로 나오는경우(a2)입니다. 국가이미지를 어디서 받았는지 기억이 없어서;;;
검색하시면 전체이름으로 나오는 국가이미지도 있으니, 그에맞게 하시면 되겠습니다.
참고로, 쿼리문에서 a2는 2자국가명,a3는 3자국가명, country는 전체국가명입니다.
** 부호반대로 준거 수정 ㅡ.ㅡ<div class='small'>[이 게시물은 관리자님에 의해 2011-10-31 17:16:08 PHP & HTML에서 이동 됨]</div>
댓글 1개
15년 전
그래서 구글에서 자꾸 내 아이피를 중국이라 했었구나..
제 아이피는 중국으로 분류되어있네요.
제 아이피는 중국으로 분류되어있네요.
게시판 목록
프로그램
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 2130 | 17년 전 | 1184 | ||
| 2129 |
ⓧ힘내세요
|
17년 전 | 2239 | |
| 2128 | 17년 전 | 2874 | ||
| 2127 | 17년 전 | 4058 | ||
| 2126 | 17년 전 | 3145 | ||
| 2125 | 17년 전 | 1408 | ||
| 2124 | 17년 전 | 1707 | ||
| 2123 | 17년 전 | 2238 | ||
| 2122 | 17년 전 | 1545 | ||
| 2121 | 17년 전 | 1723 | ||
| 2120 | 17년 전 | 2718 | ||
| 2119 | 17년 전 | 2145 | ||
| 2118 | 17년 전 | 1798 | ||
| 2117 |
아름다운세상
|
17년 전 | 4207 | |
| 2116 | 17년 전 | 3049 | ||
| 2115 | 17년 전 | 1435 | ||
| 2114 |
아름다운세상
|
17년 전 | 3570 | |
| 2113 | 17년 전 | 2796 | ||
| 2112 | 17년 전 | 2077 | ||
| 2111 | 17년 전 | 1294 | ||
| 2110 | 17년 전 | 2335 | ||
| 2109 | 17년 전 | 2070 | ||
| 2108 | 17년 전 | 1992 | ||
| 2107 |
휴전합시다
|
17년 전 | 1922 | |
| 2106 | 17년 전 | 1169 | ||
| 2105 |
|
17년 전 | 1873 | |
| 2104 | 17년 전 | 2930 | ||
| 2103 | 17년 전 | 1435 | ||
| 2102 | 17년 전 | 1671 | ||
| 2101 | 17년 전 | 1356 | ||
| 2100 | 17년 전 | 1601 | ||
| 2099 | 17년 전 | 1575 | ||
| 2098 | 17년 전 | 1446 | ||
| 2097 | 17년 전 | 2568 | ||
| 2096 | 17년 전 | 2329 | ||
| 2095 | 17년 전 | 2111 | ||
| 2094 | 17년 전 | 1422 | ||
| 2093 | 17년 전 | 2435 | ||
| 2092 | 17년 전 | 4264 | ||
| 2091 | 17년 전 | 2753 | ||
| 2090 | 17년 전 | 1665 | ||
| 2089 | 17년 전 | 1857 | ||
| 2088 | 17년 전 | 3239 | ||
| 2087 | 17년 전 | 2237 | ||
| 2086 | 17년 전 | 3834 | ||
| 2085 | 17년 전 | 1682 | ||
| 2084 | 17년 전 | 2287 | ||
| 2083 | 17년 전 | 2110 | ||
| 2082 | 17년 전 | 1615 | ||
| 2081 | 17년 전 | 2129 | ||
| 2080 |
letsgolee
|
17년 전 | 1921 | |
| 2079 | 17년 전 | 1962 | ||
| 2078 | 17년 전 | 3074 | ||
| 2077 | 17년 전 | 2151 | ||
| 2076 | 17년 전 | 1443 | ||
| 2075 | 17년 전 | 1462 | ||
| 2074 | 17년 전 | 2131 | ||
| 2073 | 17년 전 | 3207 | ||
| 2072 | 17년 전 | 2139 | ||
| 2071 |
휴전합시다
|
17년 전 | 1534 | |
| 2070 | 17년 전 | 4251 | ||
| 2069 | 17년 전 | 2043 | ||
| 2068 | 17년 전 | 3465 | ||
| 2067 | 17년 전 | 6039 | ||
| 2066 | 17년 전 | 1485 | ||
| 2065 |
letsgolee
|
17년 전 | 1655 | |
| 2064 | 17년 전 | 1235 | ||
| 2063 | 17년 전 | 1350 | ||
| 2062 |
vicky
|
17년 전 | 2876 | |
| 2061 | 17년 전 | 1909 | ||
| 2060 |
카프카07
|
17년 전 | 2596 | |
| 2059 | 17년 전 | 1311 | ||
| 2058 | 17년 전 | 3185 | ||
| 2057 | 17년 전 | 2167 | ||
| 2056 | 17년 전 | 2612 | ||
| 2055 | 17년 전 | 1407 | ||
| 2054 | 17년 전 | 1759 | ||
| 2053 | 17년 전 | 1150 | ||
| 2052 |
|
17년 전 | 1209 | |
| 2051 | 17년 전 | 1795 | ||
| 2050 | 17년 전 | 1235 | ||
| 2049 | 17년 전 | 4313 | ||
| 2048 | 17년 전 | 1515 | ||
| 2047 | 17년 전 | 2011 | ||
| 2046 |
카프카07
|
17년 전 | 7094 | |
| 2045 | 17년 전 | 1385 | ||
| 2044 | 17년 전 | 1904 | ||
| 2043 | 17년 전 | 3136 | ||
| 2042 | 17년 전 | 1229 | ||
| 2041 |
카프카07
|
17년 전 | 1989 | |
| 2040 | 17년 전 | 1169 | ||
| 2039 |
smilesol
|
17년 전 | 1857 | |
| 2038 | 17년 전 | 2158 | ||
| 2037 |
|
17년 전 | 2974 | |
| 2036 | 17년 전 | 1249 | ||
| 2035 |
|
17년 전 | 1345 | |
| 2034 |
ㅣ곰탱이ㅣ
|
17년 전 | 1566 | |
| 2033 |
|
17년 전 | 1234 | |
| 2032 | 17년 전 | 4361 | ||
| 2031 | 17년 전 | 3903 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기