웹마스터 팁

ip주소를 정수로 변환해서 DB에 저장하면 어떨까하고 만들어본 함수...


ip2int : ip를 정수로 변환

int2ip : ip2int의 결과로 나온수를 ip로 저장...


만일 IP가 255.255.255.255면 DB에  저장하려면,
char(15)의 칼럼이 필요합니다.
만일 정수로 변환하면 4바이트인 int타입의 칼럼에 저장할수가;;

변환할때는 귀찮아서 비트연산으로 쉬프트~ 쉬프트~
참고로 php는 unsigned가 지원되지 않아서(-_-;)
128.???.???.??? 이상의 ip는 음수로 값이 나옵니다
(ex : 255.001.001.001, 128.111.111.111)
(다시 ip로 변환에는 문제 없습니다.)


        function ip2int($ip){

                sscanf($ip, "%d.%d.%d.%d", $a, $b, $c, $d);

                $int = 0;

                $int += ($a << 24);
                $int += ($b << 16);
                $int += ($c << 8);
                $int += $d;

                return $int;
        }


        function int2ip($int){

                $ip = '';

                $temp .= ($int >> 24);

                if(($int >> 24) < 0) $temp += 256;

                $ip .= $temp.'.';
                $ip .= (($int & (0x00FF0000)) >> 16);
                $ip .= '.';
                $ip .= (($int & (0x0000FF00)) >> 8);
                $ip .= '.';
                $ip .= ($int & (0x000000FF));

                return $ip;
        }