php实现iptolong
PHP 实现 IP 转长整型(iptolong)
在 PHP 中,将 IP 地址转换为长整型数字可以通过内置函数或手动计算实现。以下是几种常见方法:
使用 ip2long 函数
PHP 提供了 ip2long 函数,可直接将 IPv4 地址转换为长整型数字:
$ip = '192.168.1.1';
$long = ip2long($ip);
echo $long; // 输出:3232235777
注意事项:

- 该函数仅支持 IPv4 地址。
- 返回值为带符号整数,可能为负数。若需无符号整数,需用
sprintf处理:
$unsignedLong = sprintf('%u', ip2long($ip));
手动计算 IP 转长整型
若需手动实现(如无 ip2long 函数),可通过位运算完成:
function ipToLong($ip) {
$parts = explode('.', $ip);
return ($parts[0] << 24) + ($parts[1] << 16) + ($parts[2] << 8) + $parts[3];
}
$ip = '192.168.1.1';
$long = ipToLong($ip);
echo $long; // 输出:3232235777
处理 IPv6 地址
若需支持 IPv6 地址,需使用 inet_pton 和 unpack 函数:

function ip6ToLong($ip) {
$bin = inet_pton($ip);
$unpacked = unpack('J*', $bin); // 64位系统
return $unpacked[1];
}
$ipv6 = '2001:0db8:85a3:0000:0000:8a2e:0370:7334';
$long = ip6ToLong($ipv6);
echo $long; // 输出对应长整型
注意事项:
- IPv6 地址范围较大,需确保系统支持 64 位整数。
- 部分 PHP 版本可能需调整
unpack格式(如N*用于 32 位系统)。
验证 IP 地址有效性
转换前建议验证 IP 格式:
if (filter_var($ip, FILTER_VALIDATE_IP)) {
$long = ip2long($ip);
} else {
echo "Invalid IP address";
}
通过以上方法,可灵活实现 IP 地址与长整型的相互转换。






