sprintf("%u",
ip2long
(
$ip
);
就能转换为正整数。而且得到的结果用 long2ip 也可以正常转换回原来的 ip 地址。也可以用
ip2long
来验证一个 ip 是否是有效的,如
复制代码 代码如下:
<?php
function
chk_ip(
$ip
){
if
(
ip2long
(
$ip
)=="-1") {
return
false;
}
returntrue;
}
//应用
var_export(chk_ip("10.111.149.42"));
var_export(chk_ip("10.111.256.42"));
?>
将输出 true 和 false
把 ip 数据保存在数据库(MySQL)中时候,我们习惯用
ip2long
函数生成整型,然后存放在一
个 int(11)类型的字段中,但是,在不同的系统平台上,
ip2long
函数得到的值是不同的,因此可
能造成在从数据库中读出数据,用 long2ip 得到 ip 的时候产生错误,说一下我们碰到的情况:
我们用一个 int(11)类型(范围-2147483648 -2147483647)来保存把一个 ip 地址用
ip2long
处
理得到的结果,例如 ip 是'202.105.77.179′,那么在 32 位机器上得到的结果是:-899068493,而
在 64 位机器上却得到 3395898803.然后把它写入数据库,由于超过 int(11)的范围,因此 64 位
机器上的结果被保存为 int(11)的最大值:2147483647.于是在从数据库中取出的时候,便得到
了错误的结果,
”
会得到 127.255.255.255″这个 ip 地址.
解决的办法很多,比如可以用 mysql 的函数:INET_ATON 和 INET_NTOA 来处理 ip 地址;或
者把保存 ip 地址的字段改为 bigint 类型,这样在 64 位机器上虽然保存的是 3395898803,使
用 long2ip 函数仍能得到正确的结果.