2011-08-29 5 views
0

이 코드로 사용자의 IP 주소를 얻는 중입니다. 나는 내 db 테이블에 ip의 int 필드에 대한 부호가 없다.MySQL 데이터베이스 테이블에 ip address를 저장하는 데 문제가 있습니다.

<?php 
    if (!empty($_SERVER['HTTP_CLIENT_IP'])){ 
     $ip=$_SERVER['HTTP_CLIENT_IP']; 
    //proxy check 
    }elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){ 
     $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; 
    }else{ 
     $ip=$_SERVER['REMOTE_ADDR']; 
    } 
    $ip = ip2long($ip); 
    ?> 

로컬 서버의 테스트 웹 사이트. 문제는 ip2long 변환 후 '63177408abbad957ed13ae1a2dd3e0b3ed47bd0b48ffcb362'가 나오는 것입니다. 시도했습니다

$ip=$_SERVER['REMOTE_ADDR']; 
    $ip = ip2long($ip); 

너무했습니다. 여전히 성공하지 못했습니다. 어떻게 해결할 수 있습니까?

답변

5

PHP를 32 비트로 설치하면 IP 주소가 손상 될 가능성이 큽니다. 다른 대안은 주에 따라, ip2long man page에, 부호없는 정수로 취급하는 PHP를 강제하는 것입니다

$ip = mysql_real_escape_string('127.0.0.1'); 
$sql = "INSERT INTO yourtable (ip) VALUES (INET_ATON('$ip'));"; 

: 문제를 겪지 않는다 MySQL의 내부 변환을 수행하려고 $ip = sprintf('%u', ip2long($ip));

또한, IPv6가 널리 보급 될 것이라는 점을 기억하십시오.이 값을 저장하려면 128 비트 정수를 사용해야합니다 (MySQL은 지원하지 않습니다. 최소한 2 개의 64 비트 bigint가되어야합니다) .

+0

점점 ':: 1' –

+0

그건 127.0.0.1의 ipv6 버전입니다. –

관련 문제