IT知识库 购物 网址 游戏 小说 歌词 快照 开发 股票 美女 新闻 笑话 | 汉字 软件 日历 阅读 下载 图书馆 编程 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
  IT知识库 -> PHP -> IP的获取与转换 -> 正文阅读

[PHP]IP的获取与转换

IP的获取与转换 IP的获取与转换
1、前言
IP转换成整型存储是数据库优化一大趋势,字符串索引比整型索引消耗资源很多,特别是表中数据量大的时候,以及求查询某一个ip段的数据。本文所指的IP是ip4,ip6暂不再讨论范围
2、ip4转化为整形
这里将介绍:
php自带函数 ip2long   php原生模拟ip2long的过程
2.1、ip2long
判断一个 ip4 地址是不是合法的 ip,符合则返回一个长整型,不符合返回 false
以下是测试:

然而当 ip4 值较大时,ip2long转化会出现负数的情况

2.2、php原生模拟ip2long的过程
php自带的ip2long虽然好用,由于返回值是int,所以会造成数据溢出,比如有些ip地址转换后变成负数,为了好看,还是需要自己模拟一个ip2long的过程,不多说,先上代码

function ipToInt($ip) {
    $newHex = '';
    $aIp = explode('.', $ip); //将ip分割成数组
    foreach ($aIp as $key => $value) {
        //十进制最大值是255,超过是不合法的ip,直接返回
        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) {
            $hex = '0'.$hex;   //如果十六进制长度小于2,则自动补0
        }
        $newHex .= $hex;    
    }
    $int = hexdec($newHex);//十六进制转为十进制
    return $int;
}

以下是测试:

3、将整形转化为ip
这里将介绍:
php自带函数 long2ip php原生模拟long2ip的过程 3.1、long2ip
long2ip 只会返回0.0.0.0 到255.255.255.255的内容,
传人空值默认返回0.0.0.0,超出最大值返回255.255.255.255
以下为测试:

long2ip可以识别由ip2long转化产生的负数(可喜可贺);所有在使用过程中,ip2long和long2ip一起使用就不会有什么问题,当然也要介绍一下如何用原生的模拟long2ip的过程
3.2、php原生模拟long2ip的过程
php自带的long2ip已经可以解决大部分问题,这里也只是简单介绍一下原生的模拟方法,不多说,先上代码

function intToIp($int) {
    //FFFFFF最大为4294967295
    $int = $int > 4294967295 ? 4294967295 : $int;
    $dec = dechex($int); //讲十进制转为十六进制

    //十六进制默认会忽略最左边的0,毕竟是0了,怎么算都是0,留着也没用
    //但中间的0会保留,而IP的十六进制最大为FFFFFF(大F团)
    //所有为防止7位IP的出现,我们只能手动补0,才能成双成对(2个一对)
    if(strlen($dec) < 8) {
        $dec = '0'.$dec; //如果长度小于8,最自动补0
    }
    for($i = 0; $i < 8; $i += 2){
        $hex = substr($dec, $i, 2);
        $ippart = substr($hex, 0, 1);//截取十六进制的第一位
        if($ippart === '0') {
            $hex = substr($hex, 1, 1);//如果第一位为0,说明原始数值只有1位,还是要拆散
        }
        $aIp[] = hexdec($hex); //将每段十六进制数转换我为十进制,即每个ip段的值
    }
    return implode('.',$aIp);
}

以下为测试: 

4.1、ip2long
判断一个 ip4 地址是不是合法的 ip,符合则返回一个长整型,不符合返回 false
详情参考:http://php.net/manual/en/function.ip2long.php

4.2、dechex
十进制转化为十六进制(不用自己写方法,爽)
详情参考:http://www.php.net/manual/zh/function.dechex.php

4.3、hexdec
十六进制转十进制
详情参考:http://php.net/manual/zh/function.hexdec.php

4.4、long2ip
将长整型转化为 ip4 格式的字符串,用于判断一个ip是否合法
详情参考:http://php.net/manual/en/function.long2ip.php

上一篇文章      下一篇文章      查看所有文章
加:2017-08-16 23:29:39  更:2017-08-16 23:29:44 
 
  PHP 最新文章
PHP中被忽略的性能优化利器:生成器
cakephp搭建配置完成后怎么关闭cake标识
如何配置php session使用redis集群
cakephp怎么默认显示index/index文件
PHP入门怎么选?大学生适合学习吗?
php 回调函数和匿名函数
PHP学习记录第一篇:Ubuntu14.04下LAMP环境
URL、表单数据、IP等处理类
实现网页页面跳转的几种方法
“最简单的分页代码”
技术频道: 站长资讯 .NET新手区 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA Visual Studio ASP.NET MVC .NET控件开发 Entity Framework WinRT/Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动设计 Html/Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP Oracle ERP Dynamics CRM K2 BPM 信息安全 企业信息化其他 Android开发 iOS开发 Windows Phone Windows Mobile 其他手机开发 敏捷开发 项目与团队管理 软件工程其他 SQL Server Oracle MySQL NoSQL 其它数据库 Windows 7 Windows Server Linux
脚本语言: vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程
网站开发: CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 新闻资讯 小游戏 Chinese Culture 股票 三丰软件 开发 中国文化 网文精选 阅读网 看图 日历 万年历 2018年10日历
2018-10-22 14:22:26
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT知识库