php手动实现ip2long和long2ip
2024-08-29 20:22:15
php手动实现ip2long和long2ip
/**
* 测试
*/
public function testipAction() {
$ip = '10.58.101.175';
echo ip2long($ip);
echo "<br>";
echo $this->myip2long($ip);
echo "<br>";
echo long2ip('171599279');
echo "<br>";
echo $this->mylong2ip('171599279');
} /**
* 自己实现ip2long
* @param $ip
* @return float|int|string
*/
protected function myip2long($ip) {
$newhex = '';
// 将ip分割成数组
$ipsArr = explode('.', $ip);
foreach ($ipsArr as $key => $value) {
// 十进制最大值是255,如果超过,则直接返回
if ($value > 255) {
return '';
}
// 将十进制转化为十六进制
$hex = dechex($value);
// 每个ip最大是255,十六进制是FF,最大是两位
// 比如ip:1.1.1.1如果不补0,则十六进制是1111,十进制是4369
// 如果补0,则十六进制是01010101,十进制是16843009
if (strlen($hex) < 2) {
// 如果十六进制长度小于2,则自动补0
$hex = '0' . $hex;
}
$newhex .= $hex;
}
// 十六进制转化为十进制
$intStr = hexdec($newhex);
return $intStr;
} /**
* 自己实现long2ip
* @param $int
* @return string
*/
protected function mylong2ip($int) {
// FFFFFF最大为4294967295
$int = $int > 4294967295 ? 4294967295 : $int;
// 将十进制转为十六进制
$hex = dechex($int);
//为了避免7位ip出现,我们手动补0
if (strlen($hex) < 8) {
// 长度小于8,则自动补0
$hex = '0'. $hex;
}
// 每两位进行分组。然后查看每组的第一位是否是0,如果是则去掉。然后把得到的值转为十进制,放在数组中,最后把数组用.连接起来
for ($i =0; $i<8;$i+=2) {
$a = substr($hex, $i, 2);
$ippart = substr($a, 0, 1);
if ($ippart === '0') {
$a = substr($a, 1, 1);
}
$aparr[] = hexdec($a);
}
return implode('.', $aparr);
}
最新文章
- $scope 的生命周期
- html5 上传头像的裁剪
- AngularJS指令的详解
- Transform组件C#游戏开发快速入门
- osg,qt编译的一些问题
- oracle组建:ODAC112021Xcopy_x64,在开发机上,不用安装oracle的客户端等开发
- HashMap存储数据赋值javabean简单示例
- PHP内存消耗
- Kafka的coordinator
- Android 内存剖析 – 发现潜在问题
- nginx流量带宽等请求状态统计( ngx_req_status)
- jquery-ui 之draggable详解
- KEIL简单实例
- JS 实现图片直接下载
- 查看Linux系统文本编码-方便修改ssh编码一致
- [UWP]附加属性2:实现一个Canvas
- JS中的函数、Bom、DOM及JS事件
- PHP容器--Pimple运行流程浅析
- ●SPOJ 8222 NSUBSTR - Substrings(后缀数组)
- shell编程 之 函数