php - 在 MySQL 数据库表中存储 IP 地址时出现问题

标签 php mysql ip

使用这段代码获取用户的 ip 地址。我的数据库表中有 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);
    ?>

在本地服务器上测试网站。问题是,在 ip2long 转换后得到 '63177408abbad957ed13ae1a2dd3e0b3ed47bd0b48ffcb362'。尝试过

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

也是。仍然没有成功。我该如何解决?

最佳答案

您很可能正在安装 32 位 PHP,这会破坏 IP 地址。尝试在 mysql 中进行转换,这不会遇到问题:

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

另一种选择是强制 PHP 将其视为无符号整数,根据 ip2long man page 上的注释: $ip = sprintf('%u', ip2long($ip));

此外,请记住 IPv6 将“随时”普及,您需要使用 128 位整数来存储这些值(MySQL 不支持 - 它必须是两个 64 位整数最少)。

关于php - 在 MySQL 数据库表中存储 IP 地址时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7236108/

相关文章:

android - 在不调用外部服务器的情况下获取互联网 ip

heroku - 如何使用 Google 云固定 IP 为 Heroku 应用程序提供服务

php - Divi builder背景视频要静音

php - 在 PHP 中将数组的递增索引值插入数据库时​​出错

mysql - 在 MySQL 查询中创建排名列

c# - 仅选择 LINQ 中定义的列

php - 如果我的服务器有多个 IP 地址,我如何使用每个 IP 地址运行脚本?

php - 如何从数组中提取和删除选定的变量?

php - mysql, php , 相同的结果如何统计?

php - PHP 无法显示图像