관련작업을 하다가 검색을 통해 구현해봤습니다.
쓰일일이 잘 없겠지만, 국가별경우 제어하는 경우는 생길수 있어 응용하시면 되겠습니다.
알고리즘은 매우간단합니다. 전세계 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년 전
그래서 구글에서 자꾸 내 아이피를 중국이라 했었구나..
제 아이피는 중국으로 분류되어있네요.
제 아이피는 중국으로 분류되어있네요.
게시판 목록
프로그램
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 3230 | 14년 전 | 1171 | ||
| 3229 | 14년 전 | 1408 | ||
| 3228 | 14년 전 | 1289 | ||
| 3227 |
|
14년 전 | 1679 | |
| 3226 | 14년 전 | 1599 | ||
| 3225 |
BlackHeart
|
14년 전 | 911 | |
| 3224 | 14년 전 | 1426 | ||
| 3223 | 14년 전 | 801 | ||
| 3222 | 14년 전 | 902 | ||
| 3221 | 14년 전 | 6887 | ||
| 3220 | 14년 전 | 2252 | ||
| 3219 | 14년 전 | 1903 | ||
| 3218 | 14년 전 | 934 | ||
| 3217 |
resonss
|
14년 전 | 1224 | |
| 3216 | 14년 전 | 1070 | ||
| 3215 | 14년 전 | 1727 | ||
| 3214 |
마케팅메지션
|
14년 전 | 1482 | |
| 3213 |
jjongs
|
14년 전 | 1053 | |
| 3212 | 14년 전 | 883 | ||
| 3211 | 14년 전 | 4322 | ||
| 3210 |
|
14년 전 | 2683 | |
| 3209 | 14년 전 | 1005 | ||
| 3208 | 14년 전 | 690 | ||
| 3207 | 14년 전 | 1318 | ||
| 3206 | 14년 전 | 1611 | ||
| 3205 | 14년 전 | 1363 | ||
| 3204 |
|
14년 전 | 807 | |
| 3203 |
|
14년 전 | 1811 | |
| 3202 |
|
14년 전 | 3107 | |
| 3201 | 14년 전 | 1256 | ||
| 3200 | 14년 전 | 1177 | ||
| 3199 | 14년 전 | 1009 | ||
| 3198 |
달콤한인생
|
14년 전 | 813 | |
| 3197 | 14년 전 | 662 | ||
| 3196 | 14년 전 | 740 | ||
| 3195 | 14년 전 | 1909 | ||
| 3194 |
sky88
|
14년 전 | 995 | |
| 3193 | 14년 전 | 1335 | ||
| 3192 |
gollaba
|
14년 전 | 3505 | |
| 3191 |
gollaba
|
14년 전 | 1257 | |
| 3190 | 14년 전 | 1385 | ||
| 3189 | 14년 전 | 1109 | ||
| 3188 | 14년 전 | 1101 | ||
| 3187 | 14년 전 | 1678 | ||
| 3186 | 14년 전 | 1464 | ||
| 3185 |
|
14년 전 | 1006 | |
| 3184 | 14년 전 | 1367 | ||
| 3183 | 14년 전 | 1339 | ||
| 3182 | 14년 전 | 1512 | ||
| 3181 | 14년 전 | 1346 | ||
| 3180 | 14년 전 | 1138 | ||
| 3179 | 14년 전 | 1736 | ||
| 3178 | 14년 전 | 1004 | ||
| 3177 | 14년 전 | 951 | ||
| 3176 | 14년 전 | 940 | ||
| 3175 | 14년 전 | 1096 | ||
| 3174 | 14년 전 | 1396 | ||
| 3173 | 14년 전 | 1169 | ||
| 3172 |
마케팅메지션
|
14년 전 | 1475 | |
| 3171 | 14년 전 | 1356 | ||
| 3170 | 14년 전 | 3901 | ||
| 3169 | 14년 전 | 1609 | ||
| 3168 | 14년 전 | 1148 | ||
| 3167 | 14년 전 | 1232 | ||
| 3166 |
그리자벨라
|
14년 전 | 3939 | |
| 3165 | 14년 전 | 1811 | ||
| 3164 | 14년 전 | 964 | ||
| 3163 | 14년 전 | 1369 | ||
| 3162 | 14년 전 | 865 | ||
| 3161 | 14년 전 | 1450 | ||
| 3160 | 14년 전 | 1108 | ||
| 3159 | 14년 전 | 2883 | ||
| 3158 |
신입프로그래머
|
14년 전 | 769 | |
| 3157 | 14년 전 | 1106 | ||
| 3156 |
|
14년 전 | 2922 | |
| 3155 |
|
14년 전 | 946 | |
| 3154 | 14년 전 | 973 | ||
| 3153 |
마케팅메지션
|
14년 전 | 1223 | |
| 3152 |
마케팅메지션
|
14년 전 | 1219 | |
| 3151 |
마케팅메지션
|
14년 전 | 888 | |
| 3150 | 14년 전 | 2397 | ||
| 3149 | 14년 전 | 959 | ||
| 3148 | 14년 전 | 1353 | ||
| 3147 | 14년 전 | 470 | ||
| 3146 | 14년 전 | 1212 | ||
| 3145 |
마케팅메지션
|
14년 전 | 1172 | |
| 3144 | 14년 전 | 1263 | ||
| 3143 | 14년 전 | 3057 | ||
| 3142 | 14년 전 | 714 | ||
| 3141 | 14년 전 | 971 | ||
| 3140 | 14년 전 | 1028 | ||
| 3139 | 14년 전 | 1547 | ||
| 3138 | 14년 전 | 1462 | ||
| 3137 | 14년 전 | 2473 | ||
| 3136 | 14년 전 | 1886 | ||
| 3135 | 14년 전 | 1444 | ||
| 3134 | 14년 전 | 1637 | ||
| 3133 | 14년 전 | 3240 | ||
| 3132 | 14년 전 | 1880 | ||
| 3131 | 14년 전 | 1366 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기