gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:24:44 24 4
gpt4 key购买 nike

使用这段代码获取用户的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com