PHP中有关IPV4 和IPV6地址转换以及其它一些常见问题
这里主要介绍一下 IPV4 / IPV6 在 PHP / MySQL 中如何转换。以及中间容易碰到的一些问题。 首先介绍两个函数: ip2long :将 IPV4 的字符串互联网协议转换成长整型数字 int ip2long ( string $ip_address ) long2ip :将长整型转化为字符串形式带点的互联网标准格式地址(IPV4) string long2ip ( int $proper_address ) 问题一:MySQL 中如何存储IP地址。 IPV4 地址长度32位,有 2^32-1 个地址。 所以 MySQL 中如果使用 int 来存储,要加 unsigned 标识。 int 有符号的范围是 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) ,无符号的范围是 0 到 2^32-1(4294967295) IPV6 地址长度128位。因此不能使用 int 存储,可以使用 varchar 类型存储。 问题二:ip2long 出现负数问题。 示例: $ip_long = ip2long('192.168.8.30'); $long_ip = long2ip($ip_long); echo $ip_long; // -1062729698 echo $long_ip; // 192.168.8.30