관련작업을 하다가 검색을 통해 구현해봤습니다.
쓰일일이 잘 없겠지만, 국가별경우 제어하는 경우는 생길수 있어 응용하시면 되겠습니다.
알고리즘은 매우간단합니다. 전세계 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년 전
그래서 구글에서 자꾸 내 아이피를 중국이라 했었구나..
제 아이피는 중국으로 분류되어있네요.
제 아이피는 중국으로 분류되어있네요.
게시판 목록
프로그램
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 7830 | 9년 전 | 380 | ||
| 7829 |
|
9년 전 | 559 | |
| 7828 | 9년 전 | 491 | ||
| 7827 | 9년 전 | 376 | ||
| 7826 | 9년 전 | 384 | ||
| 7825 | 9년 전 | 437 | ||
| 7824 | 9년 전 | 419 | ||
| 7823 | 9년 전 | 326 | ||
| 7822 | 9년 전 | 322 | ||
| 7821 | 9년 전 | 266 | ||
| 7820 | 9년 전 | 322 | ||
| 7819 |
|
9년 전 | 726 | |
| 7818 | 10년 전 | 339 | ||
| 7817 | 10년 전 | 461 | ||
| 7816 | 10년 전 | 362 | ||
| 7815 | 10년 전 | 568 | ||
| 7814 | 10년 전 | 394 | ||
| 7813 | 10년 전 | 340 | ||
| 7812 | 10년 전 | 348 | ||
| 7811 | 10년 전 | 365 | ||
| 7810 | 10년 전 | 501 | ||
| 7809 | 10년 전 | 441 | ||
| 7808 | 10년 전 | 308 | ||
| 7807 | 10년 전 | 366 | ||
| 7806 |
프로그래머7
|
10년 전 | 1309 | |
| 7805 | 10년 전 | 1231 | ||
| 7804 |
zahir1312
|
10년 전 | 747 | |
| 7803 |
|
10년 전 | 1348 | |
| 7802 | 10년 전 | 408 | ||
| 7801 | 10년 전 | 834 | ||
| 7800 | 10년 전 | 1060 | ||
| 7799 | 10년 전 | 508 | ||
| 7798 | 10년 전 | 464 | ||
| 7797 | 10년 전 | 457 | ||
| 7796 | 10년 전 | 305 | ||
| 7795 | 10년 전 | 457 | ||
| 7794 | 10년 전 | 485 | ||
| 7793 | 10년 전 | 1005 | ||
| 7792 | 10년 전 | 411 | ||
| 7791 | 10년 전 | 496 | ||
| 7790 | 10년 전 | 462 | ||
| 7789 |
fbastore
|
10년 전 | 1406 | |
| 7788 | 10년 전 | 496 | ||
| 7787 | 10년 전 | 359 | ||
| 7786 | 10년 전 | 512 | ||
| 7785 | 10년 전 | 533 | ||
| 7784 | 10년 전 | 599 | ||
| 7783 | 10년 전 | 402 | ||
| 7782 | 10년 전 | 449 | ||
| 7781 | 10년 전 | 862 | ||
| 7780 | 10년 전 | 784 | ||
| 7779 | 10년 전 | 752 | ||
| 7778 | 10년 전 | 320 | ||
| 7777 | 10년 전 | 410 | ||
| 7776 | 10년 전 | 410 | ||
| 7775 | 10년 전 | 345 | ||
| 7774 | 10년 전 | 604 | ||
| 7773 | 10년 전 | 333 | ||
| 7772 | 10년 전 | 671 | ||
| 7771 | 10년 전 | 334 | ||
| 7770 | 10년 전 | 616 | ||
| 7769 | 10년 전 | 335 | ||
| 7768 | 10년 전 | 549 | ||
| 7767 | 10년 전 | 1121 | ||
| 7766 | 10년 전 | 446 | ||
| 7765 | 10년 전 | 484 | ||
| 7764 |
잘살아보자
|
10년 전 | 329 | |
| 7763 |
|
10년 전 | 1403 | |
| 7762 |
Tosea
|
10년 전 | 1023 | |
| 7761 | 10년 전 | 614 | ||
| 7760 |
잘살아보자
|
10년 전 | 614 | |
| 7759 |
잘살아보자
|
10년 전 | 432 | |
| 7758 |
잘살아보자
|
10년 전 | 539 | |
| 7757 | 10년 전 | 1189 | ||
| 7756 |
ITBANK
|
10년 전 | 1221 | |
| 7755 | 10년 전 | 1899 | ||
| 7754 | 10년 전 | 1005 | ||
| 7753 | 10년 전 | 846 | ||
| 7752 | 10년 전 | 1351 | ||
| 7751 |
잘살아보자
|
10년 전 | 477 | |
| 7750 |
잘살아보자
|
10년 전 | 444 | |
| 7749 |
잘살아보자
|
10년 전 | 445 | |
| 7748 |
잘살아보자
|
10년 전 | 424 | |
| 7747 |
잘살아보자
|
10년 전 | 519 | |
| 7746 |
잘살아보자
|
10년 전 | 639 | |
| 7745 |
잘살아보자
|
10년 전 | 880 | |
| 7744 |
잘살아보자
|
10년 전 | 394 | |
| 7743 | 10년 전 | 913 | ||
| 7742 |
starbros
|
10년 전 | 791 | |
| 7741 |
잘살아보자
|
10년 전 | 616 | |
| 7740 |
잘살아보자
|
10년 전 | 483 | |
| 7739 |
잘살아보자
|
10년 전 | 442 | |
| 7738 |
잘살아보자
|
10년 전 | 495 | |
| 7737 |
잘살아보자
|
10년 전 | 454 | |
| 7736 |
잘살아보자
|
10년 전 | 475 | |
| 7735 |
잘살아보자
|
10년 전 | 808 | |
| 7734 |
잘살아보자
|
10년 전 | 404 | |
| 7733 |
잘살아보자
|
10년 전 | 503 | |
| 7732 |
잘살아보자
|
10년 전 | 656 | |
| 7731 |
잘살아보자
|
10년 전 | 583 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기