Ip地址作为一个域名的门牌号很多人只知其一不知其二,今天来总结下IP是怎么在互联网上使用的。目前已经在用的分为32位和64位的IP,64现在用的很少我还没遇到过,不在本文的范畴。
32位(示例):10.189.12.241
为什么要用这种格式来显示?
回答:ip地址是二进制,只不过为了让人看,写成10进制,本质还是二进制
php提供了ip2long()和long2ip()来实现IP转换位数字和数字再次转换为IP,用于验证IP的真实性。
ip2long()代码示例
<?php
$ip = gethostbyname('www.example.com');
$long = ip2long($ip);
if ($long == -1 || $long === FALSE) {
echo 'Invalid IP, please try again';
} else {
echo $ip . "\n"; // 192.0.34.166
echo $long . "\n"; // 3221234342 (-1073732954 on 32-bit systems, due to integer overflow)
printf("%u\n", ip2long($ip)); // 3221234342
}
long2ip()代码示例
<?
if (!function_exists("long2ip")) {
function long2ip($long) {
// Valid range: 0.0.0.0 -> 255.255.255.255
if ($long < 0 || $long > 4294967295) return false;
$ip = "";
for ($i=3;$i>=0;$i--) {
$ip .= (int)($long / pow(256,$i));
$long -= (int)($long / pow(256,$i))*pow(256,$i);
if ($i>0) $ip .= ".";
}
return $ip;
}
}
不管是那个函数都要知晓其执行的原理,既然我们已经知道所谓的IP其实就是一堆二进制的数字,那么我们来解释解释这个函数的原理
32位意思是:32个0101组成的数字,逢8位截取一段将二进制机器码转换为能看得懂的十进制数字,用“.”间隔就变成了我们常规看到的xxx.xxxx.xxx.xxx的ip地址