아이피주소에 따른 국가별 이미지 보여주기
관련작업을 하다가 검색을 통해 구현해봤습니다.
쓰일일이 잘 없겠지만, 국가별경우 제어하는 경우는 생길수 있어 응용하시면 되겠습니다.
알고리즘은 매우간단합니다. 전세계 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년 전
그래서 구글에서 자꾸 내 아이피를 중국이라 했었구나..
제 아이피는 중국으로 분류되어있네요.
제 아이피는 중국으로 분류되어있네요.
게시글 목록
| 번호 | 제목 |
|---|---|
| 21248 | |
| 13844 | |
| 529 | |
| 13842 | |
| 526 | |
| 29537 |
HTML
갈팡질팡
2
|
| 518 | |
| 502 | |
| 13840 | |
| 25293 | |
| 21244 | |
| 29532 |
HTML
블로그와 그누연동 가능할까요?
4
|
| 25288 | |
| 29531 |
HTML
안녕하세요..질문좀 드릴꼐요 ^^;
|
| 500 | |
| 13836 |
Flash
플래시버튼으로
3
|
| 21241 | |
| 495 | |
| 13832 |
JavaScript
제목에 한글 영문 숫자 와 공란만 입력하게 하고 싶습니다.
3
|
| 25283 | |
| 21236 | |
| 13830 | |
| 490 | |
| 21220 | |
| 21217 | |
| 25277 | |
| 25276 | |
| 25275 | |
| 484 | |
| 13827 | |
| 13825 | |
| 13819 |
JavaScript
[펌] 정규식 고수님들 ㅠㅠ... '차량번호' 정규식좀..
5
|
| 29529 | |
| 13813 | |
| 479 | |
| 21211 | |
| 25273 | |
| 478 | |
| 21201 | |
| 25272 | |
| 21189 | |
| 477 | |
| 476 | |
| 21185 | |
| 474 | |
| 21181 | |
| 21175 | |
| 472 | |
| 470 | |
| 469 | |
| 467 | |
| 465 | |
| 21168 | |
| 25267 | |
| 463 | |
| 21164 | |
| 21161 | |
| 458 | |
| 21146 | |
| 457 | |
| 13807 | |
| 454 | |
| 29528 | |
| 451 | |
| 447 | |
| 21127 | |
| 21122 | |
| 25262 | |
| 25254 | |
| 21119 | |
| 25251 | |
| 25243 | |
| 25239 |
기획서
웹기획서 작성process
3
|
| 21112 | |
| 442 | |
| 21103 | |
| 25233 | |
| 25222 | |
| 25230 | |
| 441 | |
| 21100 | |
| 25215 | |
| 21097 | |
| 21091 | |
| 25212 | |
| 25210 | |
| 25209 | |
| 21083 | |
| 21080 | |
| 439 | |
| 438 | |
| 436 | |
| 25200 | |
| 21066 | |
| 25195 | |
| 21055 | |
| 21051 | |
| 25192 | |
| 21040 | |
| 13803 |
기타
모바일사이트 시안.
3
|
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기