我正在编写一个脚本来获取访问者IP,通过爆炸删除它的点,在数据库中存储没有点的IP,然后获取它并回应它。 但是,当我将它存储到数据库中时,我的IP变得非常混乱。
示例:我的IP是178.175.35.205
,没有点:17817535205
,但是当通过MYSQL时,我甚至可以在PhpMyAdmin上看到它,转换为2147483647
。
更新:事实证明一切都很好,但我使用INT
除了BIGINT
。修好了。
我现在正在使用ip2long和long2ip。
答案 0 :(得分:6)
强烈建议:
1)将IP存储为字符串
优点:
2)你可以留在“。”
......和......
3)您可以容纳IPv4和/或IPv6地址
IMHO ..
答案 1 :(得分:4)
不要重新发明轮子
使用http://php.net/manual/en/function.ip2long.php
和http://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
答案 2 :(得分:0)
这里的问题是您使用的整数表示大于MySQL中INT
列中存储的整数表示。在PHP中,您可以使用ip2long
函数将IP地址转换为正确的32位整数。