在MySQL数据库表中存储ip地址时遇到问题

Tur*_*Ali 0 php mysql ip

用这段代码让用户ip地址.我的db表中有ip的unsigned int字段

   <?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);
    ?>
Run Code Online (Sandbox Code Playgroud)

在本地服务器上测试网站.问题是,越来越"63177408abbad957ed13ae1a2dd3e0b3ed47bd0b48ffcb362" ip2long转换后.试着

    $ip=$_SERVER['REMOTE_ADDR'];
    $ip = ip2long($ip);
Run Code Online (Sandbox Code Playgroud)

太.仍然没有成功.我该如何解决?

Mar*_*c B 5

你最有可能使用32位的PHP安装,这会破坏IP地址.尝试在mysql中进行转换,这不会遇到问题:

$ip = mysql_real_escape_string('127.0.0.1');
$sql = "INSERT INTO yourtable (ip) VALUES (INET_ATON('$ip'));";
Run Code Online (Sandbox Code Playgroud)

另一种方法是强制PHP将其视为无符号整数,如ip2long手册页上的注释:$ip = sprintf('%u', ip2long($ip));

同样,请记住IPv6将"现在任何一天"广泛使用,并且您需要使用128位整数来存储这些值(MySQL不支持 - 它必须至少是两个64位bigint).