# 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 个人常用知识总结 · 看云相关推荐

  1. php处理文件属性函数,文件属性 · PHP文件系统操作常用函数整理 · 看云

    file_exists - 检查文件或目录是否存在 bool file_exists ( string $filename ) fileatime - 取得文件的上次访问时间 int fileatim ...

  2. 盘企lcms php开发框架,LCMS操作 · 盘企LCMS PHP开发框架文档 · 看云

    [TOC] ### LCMS::X 错误提示页面 ``` LCMS::X($errcode, $errmsg, $go = ""); // 如果是ajax请求,不会显示错误页面,会 ...

  3. Linux命令之route - 显示和操作IP路由表

    转自:  http://codingstandards.iteye.com/blog/1125312 用途说明 route命令用于显示和操作IP路由表(show / manipulate the IP ...

  4. python3 ipaddress模块 创建 检查 操作ip地址 简介

    目录 1.创建地址对象--ipaddress.ip_address()函数 2.定义ip网络--ipaddress.ip_network()函数 3.查看网络中独立地址个数 4.打印主机地址 5.获取 ...

  5. Linux route命令详解和使用示例(查看和操作IP路由表)

    Linux系统的route命令用于显示和操作IP路由表(show / manipulate the IP routing table).要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或 ...

  6. java ip地址相关操作

    java ip地址相关操作 @(JAVA)[scala] 参考CORE JAVA. 在JAVA中,InetAddress类用于操作与IP地址相关的内容,常用方法如下: java.net.InetAdd ...

  7. MMDB ip地址库操作

    MMDB ip地址库操作 @(JAVA)[java] MMDB即Maxmind DB,是一个设计用于存储IPv4和IPv6的数据信息的数据库,mmdb文件是一个二进制格式的文件,它使用一个二分查找树加 ...

  8. Linux系统如何PING地址,Linux下指定源ip进行ping操作的方法

    [序言] 目前在做一台电脑上两个虚拟机之间的通信. 对于每个虚拟机都有两个网卡,一个桥接模式和一个NAT模式. 那么问题来了.... 如果使用简单的ping ip形式的命令得到ping通的结果,只能证 ...

  9. FPGA设计中,Vivado 调用IP核详细操作步骤

    FPGA设计中,Vivado 调用IP核详细操作步骤 今天给大侠带来了FPGA设计中,Vivado 调用IP核详细操作步骤,话不多说,手把手教学,请往下看. 首先咱们来了解一下vivado的IP核,I ...

最新文章

  1. vc中常用文件操作(二) Ini文件操作
  2. 【跃迁之路】【473天】刻意练习系列232(2018.05.24)
  3. MFC+OPENCV实现角点检测
  4. win7中cookie的保存位置
  5. python人脸识别训练模型生产_深度学习-人脸识别DFACE模型pytorch训练(二)
  6. 未捕获的异常 'NSInternalInconsistencyException'
  7. 格密码教程(六):高斯二维格规约,解决SVP问题
  8. tuning-primer.sh 性能调试工具的使用
  9. Execution default of goal org.springframework.boot:spring-boot-maven-plugin
  10. linux epoll原理详解,Linux下selectpollepoll的实现原理(一)【转】
  11. 软件集成策略故事连载----构建错误是怎么来的
  12. 使用apktool来解包和重新打包
  13. Windows下SVN备份脚本
  14. 美化站长导航源码 自动收录+主动提交百度收录
  15. 美股数据获取 python_几行Python代码,轻松获取美股阿里巴巴的交易数据
  16. html5中的td tr,html5 表格标签 table tr td
  17. 基于STM32的倾斜仪设计(二)—— 硬件设计(2)
  18. 华为网络设备SSH方式登录配置
  19. Photoshop切图简单设置+工具介绍+以及切图方法
  20. python运维工程师前景及待遇_【运维工程师就业前景】百度2020年运维工程师待遇怎么样-看准网...

热门文章

  1. java方法重载_在Python中该如何实现Java的重写与重载
  2. c语言实验报告7,C语言实验报告7.doc
  3. 美妆海报模板|来点创意的海报设计(立体剪纸风格)
  4. 时下超火的在线教育移动应用UI套件设计素材
  5. 数据结构猴子选大王java_数据结构例子-猴子选大王
  6. mysql exists依赖查询_MySQL EXISTS 和 NOT EXISTS 子查询
  7. python label显示图片_高大上的YOLOV3对象检测算法,使用python也可轻松实现
  8. C++求字符串长度的两种方法
  9. JS中配置打开邮箱的链接
  10. Structure of a Task