当前位置:  编程技术>php

PHP中IP地址与整型数字互相转换详解

    来源: 互联网  发布时间:2014-08-26

    本文导语:  IP转换成整型存储是数据库优化一大趋势,不少人目前存储IP时还在使用字符串类型存储,字符串索引比整型索引消耗资源很多,特别是表中数据量大的时候,以及求查询某一个ip段的数据,今天说的ip是指ip4,ip6不在本文范围...

IP转换成整型存储是数据库优化一大趋势,不少人目前存储IP时还在使用字符串类型存储,字符串索引比整型索引消耗资源很多,特别是表中数据量大的时候,以及求查询某一个ip段的数据,今天说的ip是指ip4,ip6不在本文范围内。

系统函数ip2long与long2ip
PHP中有内置函数ip2long可以将ip地址转换整型。

代码如下:

$ip = '210.110.11.49';
echo ip2long($ip);

输出:
代码如下:

-764540111

输出的整型有负号是因为我们得到的结果是有符号整型,有符号整型最大值2147483647,要把结果转换为无符号型可以这么写:
代码如下:

3530427185

使用long2ip把整型转换回ip地址

代码如下:

$ip = '210.110.11.49';
$ip_int = ip2long($ip);
echo $ip."
";
echo $ip_int."
";
echo long2ip($ip_int);

输出:
代码如下:

210.110.11.49
-764540111
210.110.11.49

从结果可以看到,ip与整型可以通过函数完成。

系统函数小bug

这中bug网上一搜都是,大意说的是ip某段加个前导0,先来看看这个bug实例

代码如下:

$ip = '210.110.011.49';
$ip_int = ip2long($ip);
echo $ip."
";
echo $ip_int."
";
echo long2ip($ip_int);

输出:
代码如下:

210.110.011.49
-764540623
210.110.9.49

转换结果不匹配,我们试着在ip第一段数字前加前导0,再看看

代码如下:

$ip = '021.110.11.49';
$ip_int = ip2long($ip);
echo $ip."
";
echo $ip_int."
";
echo long2ip($ip_int);

输出:
代码如下:

021.110.11.49
292424497
17.110.11.49

转换结果都出错。以上例子都是因为加了前导0后导致转换结果出错,连带逆转结果与原转换ip不匹配。

转换原理

目前有两个算法:
第一、第一段乘以256的三次方,第二段乘以256的平方,第三段乘以256、最后总和

代码如下:

$ip = '0210.110.11.49';
 
function ipToInt($ip){
    $iparr = explode('.',$ip);
    $num = 0;
    for($i=0;$i

    
 
 

您可能感兴趣的文章:

  • php session 原理详解,用法介绍以及如何设置过期时间
  • PHP exif扩展方法开启详解
  • PHP正则匹配图片并给图片加链接详解
  • php mail to 配置详解
  • php运行环境配置详解
  • Windows server 2008搭建php运行环境图文详解(php5.3)
  • PHP中替换键名的简易方法示例详解
  • php 获取完整url地址实例详解
  • php实例分享之通过递归实现删除目录下的所有文件详解
  • PHP $_FILES中error返回值详解
  • centos源码编译php5 mcrypt模块步骤详解
  • php事务处理实例详解
  • php数组编码转换示例详解
  • PHP 正则 email语句详解
  • php.ini文件上传功能配置详解
  • PHP5 时区设置方法详解
  • php数组递归转义实例详解,php转义函数
  • 配置PHP服务器环境步骤详解
  • php引用字符串常量方法详解
  • PHP汉字拼音转换、公历农历转换的实例详解
  • php-fpm优化方法详解
  • php获取访客ip地址原理及提供七段代码供参考 iis7站长之家
  • PHP转换器 HipHop for PHP
  • PHP实现Unicode和Utf-8互相转换
  • php时区转换转换函数
  • php将html特殊字符转换成html字符串的函数:htmlspecialchars()介绍及代码举例
  • php时区转换函数示例
  • php将unix时间戳转换成字符串时间函数(date)
  • PHP 数组字符集编码转换的函数
  • php转换html标签小例子
  • php二维数组转换为字符串示例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • PHP 5.4.19 和 PHP 5.5.3 发布及下载地址
  • php获取本机ip地址 php获取远程IP地址
  • php通过socket_bind()设置IP地址代码示例
  • 地址簿 PHP Address Book
  • php使用socket_bind()函数绑定IP地址
  • PHP获取局域网中计算机名、IP地址与MAC地址
  • php获取访客ip地址原理及提供七段代码供参考
  • Web地址簿 PHP iAddressBook
  • PHP邮箱地址正确性验证示例
  • php 获取网站地址的函数代码
  • PHP实现使用优酷土豆视频地址获取swf播放器分享地址
  • php获取远程客户端真实ip地址
  • PHP根据IP地址限制用户访问
  • php伪静态如何获取地址栏url
  • php查找字符串中http地址
  • 限制ip地址段访问用php如何实现
  • PHP使用CURL获取302跳转后的地址实例
  • php获取本机ip(远程IP地址)
  • PHP的IP地址查询库 QQWry
  • php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
  • php header隐藏图片源地址示例
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • IIS7配置PHP图解(IIS7+PHP_5.2.17/PHP_5.3.5)
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • php输入流php://input使用示例(php发送图片流到服务器)
  • PHP去除html标签,php标记及css样式代码参考
  • PHP 框架 Pop php
  • PHP 'ext/soap/php_xml.c'不完整修复存在多个任意文件泄露漏洞
  • PHP的JavaScript框架 PHP.JS
  • php安装完成后如何添加mysql扩展
  • php服务器探针显示php服务器信息




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3