관련작업을 하다가 검색을 통해 구현해봤습니다.
쓰일일이 잘 없겠지만, 국가별경우 제어하는 경우는 생길수 있어 응용하시면 되겠습니다.
알고리즘은 매우간단합니다. 전세계 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년 전
그래서 구글에서 자꾸 내 아이피를 중국이라 했었구나..
제 아이피는 중국으로 분류되어있네요.
제 아이피는 중국으로 분류되어있네요.
게시판 목록
프로그램
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 2730 | 15년 전 | 641 | ||
| 2729 | 15년 전 | 1391 | ||
| 2728 |
|
15년 전 | 927 | |
| 2727 |
용다섯마리
|
15년 전 | 678 | |
| 2726 |
니콜크더만
|
15년 전 | 756 | |
| 2725 |
Insungbyun
|
15년 전 | 827 | |
| 2724 | 15년 전 | 1223 | ||
| 2723 | 15년 전 | 721 | ||
| 2722 | 15년 전 | 729 | ||
| 2721 | 15년 전 | 943 | ||
| 2720 | 15년 전 | 681 | ||
| 2719 |
|
15년 전 | 1418 | |
| 2718 | 15년 전 | 1049 | ||
| 2717 |
디이자이너
|
15년 전 | 2866 | |
| 2716 |
|
15년 전 | 1360 | |
| 2715 | 15년 전 | 644 | ||
| 2714 |
고추장불고기
|
15년 전 | 615 | |
| 2713 | 15년 전 | 767 | ||
| 2712 | 15년 전 | 1257 | ||
| 2711 | 15년 전 | 1187 | ||
| 2710 | 15년 전 | 665 | ||
| 2709 | 15년 전 | 789 | ||
| 2708 |
TWM소프트
|
15년 전 | 979 | |
| 2707 |
|
15년 전 | 1213 | |
| 2706 |
|
15년 전 | 1014 | |
| 2705 | 15년 전 | 993 | ||
| 2704 | 15년 전 | 1187 | ||
| 2703 |
|
15년 전 | 662 | |
| 2702 |
|
15년 전 | 645 | |
| 2701 | 15년 전 | 1054 | ||
| 2700 | 15년 전 | 640 | ||
| 2699 | 15년 전 | 1741 | ||
| 2698 | 15년 전 | 2237 | ||
| 2697 |
|
15년 전 | 809 | |
| 2696 | 15년 전 | 815 | ||
| 2695 | 15년 전 | 1472 | ||
| 2694 |
|
15년 전 | 874 | |
| 2693 | 15년 전 | 972 | ||
| 2692 | 15년 전 | 1381 | ||
| 2691 |
Homepix
|
15년 전 | 1537 | |
| 2690 | 15년 전 | 1644 | ||
| 2689 | 15년 전 | 1081 | ||
| 2688 |
sooram
|
15년 전 | 1756 | |
| 2687 |
terrorboys
|
15년 전 | 1559 | |
| 2686 |
진정한승리
|
15년 전 | 797 | |
| 2685 |
|
15년 전 | 1769 | |
| 2684 |
진정한승리
|
15년 전 | 917 | |
| 2683 |
dannykim
|
15년 전 | 773 | |
| 2682 | 15년 전 | 818 | ||
| 2681 | 15년 전 | 772 | ||
| 2680 | 15년 전 | 943 | ||
| 2679 | 15년 전 | 955 | ||
| 2678 | 15년 전 | 1171 | ||
| 2677 |
|
15년 전 | 3184 | |
| 2676 | 15년 전 | 1755 | ||
| 2675 | 15년 전 | 889 | ||
| 2674 | 15년 전 | 1581 | ||
| 2673 | 15년 전 | 760 | ||
| 2672 | 15년 전 | 894 | ||
| 2671 |
다케미카코
|
15년 전 | 1857 | |
| 2670 | 15년 전 | 1810 | ||
| 2669 | 15년 전 | 851 | ||
| 2668 |
terrorboys
|
15년 전 | 1112 | |
| 2667 | 15년 전 | 1069 | ||
| 2666 | 15년 전 | 1030 | ||
| 2665 | 15년 전 | 1219 | ||
| 2664 | 15년 전 | 948 | ||
| 2663 | 15년 전 | 975 | ||
| 2662 | 15년 전 | 896 | ||
| 2661 | 15년 전 | 1027 | ||
| 2660 | 15년 전 | 944 | ||
| 2659 | 15년 전 | 1539 | ||
| 2658 | 15년 전 | 777 | ||
| 2657 | 15년 전 | 748 | ||
| 2656 | 15년 전 | 1385 | ||
| 2655 | 15년 전 | 1280 | ||
| 2654 | 15년 전 | 1228 | ||
| 2653 | 15년 전 | 800 | ||
| 2652 | 15년 전 | 1589 | ||
| 2651 | 15년 전 | 975 | ||
| 2650 | 15년 전 | 1626 | ||
| 2649 |
windday
|
15년 전 | 1978 | |
| 2648 | 15년 전 | 1402 | ||
| 2647 | 15년 전 | 7600 | ||
| 2646 | 15년 전 | 1034 | ||
| 2645 | 15년 전 | 1249 | ||
| 2644 | 15년 전 | 979 | ||
| 2643 | 15년 전 | 1197 | ||
| 2642 | 15년 전 | 975 | ||
| 2641 | 15년 전 | 1188 | ||
| 2640 |
프리랜서개발자
|
15년 전 | 916 | |
| 2639 | 15년 전 | 2007 | ||
| 2638 | 15년 전 | 1019 | ||
| 2637 | 15년 전 | 926 | ||
| 2636 | 15년 전 | 1418 | ||
| 2635 | 15년 전 | 1314 | ||
| 2634 | 15년 전 | 1032 | ||
| 2633 | 15년 전 | 911 | ||
| 2632 | 15년 전 | 946 | ||
| 2631 | 15년 전 | 1231 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기