1

我正在编写一个获取访问者 IP 的脚本,通过爆炸删除它的点,将不带点的 IP 存储在数据库中,然后获取它并回显它。但是,当我将它存储到数据库中时,我的 IP 变得非常混乱。

这是代码!

示例:我的 ip 是178.175.35.205,没有点:17817535205,但是当通过 MYSQL 时,我什至可以在 PhpMyAdmin 上看到它,转换为2147483647.

更新:结果一切都很好,但我使用INT的是BIGINT. 那解决了它。我现在正在使用 ip2long 和 long2ip。

4

3 回答 3

6

强烈建议:

1)将IP存储为字符串

好处:

2)您可以在“。”中留下。

... 和 ...

3) 您可以容纳 IPv4 和/或 IPv6 地址

恕我直言..

于 2012-12-11T19:15:04.703 回答
4

不要重新发明轮子

使用http://php.net/manual/en/function.ip2long.phphttp://php.net/manual/en/function.long2ip.php 函数进行转换。

它还将为您验证它

$ipToStore =  ip2long($ip);
if (false !== $ipToStore) {
    // Store your ip
}

// Read DB
echo long2ip($ipFromDB);

确保在 db 中用于BIGINT存储它。

http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html#integer-types

于 2012-12-11T19:12:29.957 回答
0

您的问题是您使用的整数表示大于可以存储INT在 MySQL 中的列中的整数表示。在 PHP 中,您可以使用该ip2long函数将 IP 地址转换为适当的 32 位整数。

于 2012-12-11T19:15:12.730 回答