php ip操作,ip操作 · PHP 个人常用知识总结 · 看云
# ip操作
~~~
/**
* 是否为合法的IPv4地址
* @param $ipv4
* @return mixed
*/
function is_valid_ipv4($ipv4)
{
return filter_var($ipv4, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4);
}
/**
* 是否为合法的IPv6地址
* @param $ipv6
* @param bool $simplify
* @return bool|mixed|string
*
*/
function is_valid_ipv6($ipv6, $simplify=TRUE)
{
$ipv6 = filter_var($ipv6, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6);
if ($simplify and $ipv6){
$tmp = unpack('N*', inet_pton($ipv6));
$ipv6 = inet_ntop(pack('N*', $tmp[1], $tmp[2], $tmp[3], $tmp[4]));
// 避免::ffff:1.1.1.1的格式转成1.1.1.1
if (empty($tmp[1]) && empty($tmp[2]) && empty($tmp[3])) {
return inet_ntop(pack('N', $tmp[4]));
}
}
return $ipv6;
}
/**
* 判断ip地址是否在某个ip范围内,不适用ipv6
* @param $star_ip:起始ip范围地址
* @param $end_ip:结束ip范围地址
* @param $ip:需要判断的ip地址
* @return bool 是true否false
*/
function contrast_ip_range($star_ip, $end_ip, $ip)
{
if ($ip == $star_ip || $ip == $end_ip) {
return true;
}
$star_ip_array = explode('.', $star_ip);
$end_ip_array = explode('.', $end_ip);
$ip_array = explode('.', $ip);
foreach ($star_ip_array as $key => $value) {
//起始地址小于等于目标地址且结束地址大于目标地址,则代表在范围内
if ($value <= $ip_array[$key] && $end_ip_array[$key] > $ip_array[$key]) {
return true;
} elseif ($value > $ip_array[$key] || $end_ip_array[$key] < $ip_array[$key]) {
return false;
}
}
return false;
}
/*
* ip地址高位补0
* @param string $ip 192.16.1.12 / 2001:240:1024::125a:2fd
* @return string $new_ip 192.016.001.012 / 200102401024000000000000125a02fd
* */
function ip_to_full($ip)
{
// ipv4范围内ipv6转为ipv4
$ip = ip_v6v4to_v4($ip);
if (stripos($ip, ':') !== false) {
if (stripos($ip, '::') !== false) {
$arr = explode('::', $ip);
$ip_arr1 = explode(':', $arr[0]);
$ip_arr2 = explode(':', $arr[1]);
$differ = 8 - count($ip_arr1) - count($ip_arr2);
for ($i = 0; $i < $differ; $i++) {
$ip_arr1[] = '0000';
}
$ip_arr = array_merge($ip_arr1, $ip_arr2);
foreach ($ip_arr as &$val) {
$val = str_pad($val, 4, '0', STR_PAD_LEFT);
}
$new_ip = implode('', $ip_arr);
} else {
$ip_arr = explode(':', $ip);
foreach ($ip_arr as &$val) {
$val = str_pad($val, 4, '0', STR_PAD_LEFT);
}
$new_ip = implode('', $ip_arr);
}
} else {
$ip_arr = explode('.', $ip);
foreach ($ip_arr as &$val) {
$val = str_pad($val, 3, '0', STR_PAD_LEFT);
}
$new_ip = implode('.', $ip_arr);
}
return $new_ip;
}
/*
* ip转换为点分十进制或冒分十六进制
* @param string $ip 192.016.001.012 / 200102401024000000000000125a02fd
* @return string $new_ip 192.16.1.12 / 2001:240:1024::125a:2fd
* */
function convert_ip_express($ip)
{
if (strlen($ip) == 32) {
$ip_arr = [];
for ($i = 0; $i < 29; $i = $i + 4) {
$ip_arr[] = substr($ip, $i, 4);
}
//用作判断是否存在0000
$is_zero = false;
$arr1 = [];
$arr2 = [];
foreach ($ip_arr as $val) {
if ($val == '0000') {
$is_zero = true;
continue;
}
//去掉前导0
$val = ltrim($val, '0');
if ($is_zero == false) {
$arr1[] = $val;
} else {
$arr2[] = $val;
}
}
if (empty($arr2)) {
$new_ip = implode(':', $arr1);
} else {
$new_ip = implode(':', $arr1) . '::' . implode(':', $arr2);
}
} else {
$ip_arr = explode('.', $ip);
foreach ($ip_arr as &$val) {
//去掉前导0
$val = ltrim($val, '0');
$val = empty($val) ? "0" : $val;
}
$new_ip = implode('.', $ip_arr);
}
return $new_ip;
}
~~~
php ip操作,ip操作 · PHP 个人常用知识总结 · 看云相关推荐
- php处理文件属性函数,文件属性 · PHP文件系统操作常用函数整理 · 看云
file_exists - 检查文件或目录是否存在 bool file_exists ( string $filename ) fileatime - 取得文件的上次访问时间 int fileatim ...
- 盘企lcms php开发框架,LCMS操作 · 盘企LCMS PHP开发框架文档 · 看云
[TOC] ### LCMS::X 错误提示页面 ``` LCMS::X($errcode, $errmsg, $go = ""); // 如果是ajax请求,不会显示错误页面,会 ...
- Linux命令之route - 显示和操作IP路由表
转自: http://codingstandards.iteye.com/blog/1125312 用途说明 route命令用于显示和操作IP路由表(show / manipulate the IP ...
- python3 ipaddress模块 创建 检查 操作ip地址 简介
目录 1.创建地址对象--ipaddress.ip_address()函数 2.定义ip网络--ipaddress.ip_network()函数 3.查看网络中独立地址个数 4.打印主机地址 5.获取 ...
- Linux route命令详解和使用示例(查看和操作IP路由表)
Linux系统的route命令用于显示和操作IP路由表(show / manipulate the IP routing table).要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或 ...
- java ip地址相关操作
java ip地址相关操作 @(JAVA)[scala] 参考CORE JAVA. 在JAVA中,InetAddress类用于操作与IP地址相关的内容,常用方法如下: java.net.InetAdd ...
- MMDB ip地址库操作
MMDB ip地址库操作 @(JAVA)[java] MMDB即Maxmind DB,是一个设计用于存储IPv4和IPv6的数据信息的数据库,mmdb文件是一个二进制格式的文件,它使用一个二分查找树加 ...
- Linux系统如何PING地址,Linux下指定源ip进行ping操作的方法
[序言] 目前在做一台电脑上两个虚拟机之间的通信. 对于每个虚拟机都有两个网卡,一个桥接模式和一个NAT模式. 那么问题来了.... 如果使用简单的ping ip形式的命令得到ping通的结果,只能证 ...
- FPGA设计中,Vivado 调用IP核详细操作步骤
FPGA设计中,Vivado 调用IP核详细操作步骤 今天给大侠带来了FPGA设计中,Vivado 调用IP核详细操作步骤,话不多说,手把手教学,请往下看. 首先咱们来了解一下vivado的IP核,I ...
最新文章
- vc中常用文件操作(二) Ini文件操作
- 【跃迁之路】【473天】刻意练习系列232(2018.05.24)
- MFC+OPENCV实现角点检测
- win7中cookie的保存位置
- python人脸识别训练模型生产_深度学习-人脸识别DFACE模型pytorch训练(二)
- 未捕获的异常 'NSInternalInconsistencyException'
- 格密码教程(六):高斯二维格规约,解决SVP问题
- tuning-primer.sh 性能调试工具的使用
- Execution default of goal org.springframework.boot:spring-boot-maven-plugin
- linux epoll原理详解,Linux下selectpollepoll的实现原理(一)【转】
- 软件集成策略故事连载----构建错误是怎么来的
- 使用apktool来解包和重新打包
- Windows下SVN备份脚本
- 美化站长导航源码 自动收录+主动提交百度收录
- 美股数据获取 python_几行Python代码,轻松获取美股阿里巴巴的交易数据
- html5中的td tr,html5 表格标签 table tr td
- 基于STM32的倾斜仪设计(二)—— 硬件设计(2)
- 华为网络设备SSH方式登录配置
- Photoshop切图简单设置+工具介绍+以及切图方法
- python运维工程师前景及待遇_【运维工程师就业前景】百度2020年运维工程师待遇怎么样-看准网...
热门文章
- java方法重载_在Python中该如何实现Java的重写与重载
- c语言实验报告7,C语言实验报告7.doc
- 美妆海报模板|来点创意的海报设计(立体剪纸风格)
- 时下超火的在线教育移动应用UI套件设计素材
- 数据结构猴子选大王java_数据结构例子-猴子选大王
- mysql exists依赖查询_MySQL EXISTS 和 NOT EXISTS 子查询
- python label显示图片_高大上的YOLOV3对象检测算法,使用python也可轻松实现
- C++求字符串长度的两种方法
- JS中配置打开邮箱的链接
- Structure of a Task