广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php怎么实现ip转整数
  • 193
分享到

php怎么实现ip转整数

ipphp 2015-06-12 08:06:36 193人浏览 才女
摘要

本文操作环境:windows7系统、PHP7.1版、DELL G3电脑php怎么实现ip转整数 ?PHP中IP地址与整型数字互相转换详解这篇文章主要介绍了php中IP地址与整型数字互相转换详解,本文介绍了使用PHP函数ip2long与lon

本文操作环境:windows7系统、PHP7.1版、DELL G3电脑

php怎么实现ip转整数 ?

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

这篇文章主要介绍了php中IP地址与整型数字互相转换详解,本文介绍了使用PHP函数ip2long与long2ip的使用,以及它们的BUG介绍,最后给出自己写的两个算法,需要的朋友可以参考下

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."<br />";echo $ip_int."<br />";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."<br />";echo $ip_int."<br />";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<count($iparr);$i++){        $num += intval($iparr[$i]) * pow(256,count($iparr)-($i+1));
    }    return $num;
} 
echo  $ip.'<br />';$ip_int = ipToInt($ip);echo $ip_int.'<br />';echo long2ip($ip_int);

输出:

0210.110.11.49
3530427185
210.110.11.49

第二、通过位运算符

$ip = '0210.110.11.49'; 
function ipToInt($ip){    $iparr = explode('.',$ip);    return (intval($iparr[0]<<24))|(intval($iparr[1])<<16)|(intval($iparr[2])<<8)| (intval($iparr[3]));
} 
echo  $ip.'<br />';$ip_int = ipToInt($ip);echo $ip_int.'<br />';echo long2ip($ip_int);

输出:

0210.110.11.49
-764540111
210.110.11.49

检测IP是否合法

第一、自己遍历检测

function check_ip($ip){    $iparr = explode('.',$ip);    foreach($iparr as $v){ if($v>255) return false; }    return true;
} 
echo '210.285.11.49,';var_dump(check_ip('210.285.11.49'));echo '<br />';echo '210.205.11.49,';var_dump(check_ip('210.205.11.49'));
[code]

输出:
[code]210.285.11.49,bool(false)210.205.11.49,bool(true)

第二、使用ip2long返回

function check_ip($ip){    if(ip2long($ip)) return true;    return false;
} 
echo '210.285.11.49,';var_dump(check_ip('210.285.11.49'));echo '<br />';echo '210.205.11.49,';var_dump(check_ip('210.205.11.49'));

输出:

210.285.11.49,bool(false)210.205.11.49,bool(true)

后记

不少人把ip写库用ip2long转换存放int类型的字段中,但是,在不同的系统平台上,ip2long函数得到的值是不同的,因此可能造成在从数据库中读出数据逆转ip时用long2ip得到的ip与原ip不符合
如果是Mysql可以使用mysql系统函数INET_ATON与INET_NTOA解决,或者使用bigint类型处理,要么自己写函数。

--结束END--

本文标题: php怎么实现ip转整数

本文链接: https://www.lsjlt.com/news/455.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • php怎么实现ip转整数
    本文操作环境:Windows7系统、PHP7.1版、DELL G3电脑php怎么实现ip转整数 ?PHP中IP地址与整型数字互相转换详解这篇文章主要介绍了PHP中IP地址与整型数字互相转换详解,本文介绍了使用PHP函数ip2long与lon...
    99+
    2015-06-12
    ip php
  • php如何实现ip转整数
    这篇文章主要讲解了“php如何实现ip转整数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php如何实现ip转整数”吧!php实现ip转整数的方法:1、创建一个PHP示例文件;2、通过“ip...
    99+
    2023-06-25
  • php整数反转怎么实现
    本文操作环境:Windows7系统、PHP7.1、Dell G3。php整数反转怎么实现?PHP算法之整数反转给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321 示例 2:输入: ...
    99+
    2015-11-02
    php
  • php整数反转该怎么实现
    这篇文章将为大家详细讲解有关php整数反转该怎么实现,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。php实现整数反转的方法:1、创建一个PHP示例文件;2、通过“function rever...
    99+
    2023-06-21
  • php如何实现IP地址和整数的转换
    今天小编给大家分享一下php如何实现IP地址和整数的转换的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。IP地址是计算机互联网...
    99+
    2023-07-06
  • 怎么用PHP实现IP地址跳转
    在网络开发过程中,经常需要根据用户的IP地址来实现目标地址的跳转,这种跳转方式可以用于访客的地理位置选择、网站语言转换、广告投放等方面。本文将介绍如何使用PHP实现IP地址跳转。第一步:获取访客的IP地址使用PHP处理IP地址,需要首先获取...
    99+
    2023-05-14
    php
  • php怎么反转一个整数
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php怎么反转一个整数在php中,想要反转一个整数,可以借助strrev()函数:先将指定整数转为字符串类型然后使用strrev()函数反转整数字符串即可实现代码:&l...
    99+
    2014-07-12
    php 反转整数
  • php怎么将值转为整数
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php将值转为整数1、在值之前加上“(int)”或“(integer)”<php $str = '123.456abc'; $int = (int...
    99+
    2019-02-10
    php 整数
  • php怎么把负数转为正整数
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php把负数转为正整数的方法方法1:使用abs()和intval()函数abs()函数将负数转为正数intval()函数对正数取整,转为正整数实现代码:<php ...
    99+
    2020-07-18
    php
  • C++怎么实现字符串转为整数
    今天小编给大家分享一下C++怎么实现字符串转为整数的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。String to Inte...
    99+
    2023-06-19
  • php怎么将2.131转换成整数
    本文操作环境:windows7系统、PHP7.1版、DELL G3电脑php怎么将2.131转换成整数PHP把小数转成整数3种方法:这篇文章主要介绍了PHP把小数转成整数3种方法,实际上是使用的PHP自带的3个函数,分别是floor、cei...
    99+
    2019-12-07
    php 整数
  • php怎么将值转为整数型
    3种转换方法:1、使用intval()函数,可获取变量的整数值,语法“intval($var)”;2、使用settype()函数,可将变量值设置为整数型,语法“settype($var,'integer')”;3、在数据之前...
    99+
    2023-05-14
    php
  • java实现整数反转
    一、将 int 整数通过 String 转换,溢出捕获 class Solution { public int reverse(int x) { long nums = 0; int temp...
    99+
    2015-01-22
    java入门 java 实现 整数 反转
  • C++怎么实现罗马数字转化成整数
    本篇内容介绍了“C++怎么实现罗马数字转化成整数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Roman to Integer 罗马数字转化...
    99+
    2023-06-20
  • php怎么将整数转为16进制
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php将整数(十进制数)转为16进制1、使用dechex()函数使用 dechex(整数值) 函数,它可把十进制数转换为十六进制数。<php ...
    99+
    2021-04-28
    php 进制转换 十进制转十六进制
  • php怎么实现数值转ascii
    本文操作环境:windows7系统、PHP7.1版、DELL G3电脑php怎么实现数值转asciiPHP 数字转字母 ASCIIPHP通过ASCII将数字转字母 function NumToASCII($num) { if...
    99+
    2017-07-20
    php ascii
  • php怎么将int(整数)类型转为小数
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php将int(整数)类型转为小数方法1:使用number_format()函数number_format()可通过千位分组来格式化数字。<php echo nu...
    99+
    2021-07-10
    php int转小数
  • php怎么实现两数相除取整
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php实现两数相除取整,可分成两个部分看:两数相除:可利用“/”运算符进行除法运算取整:可利用取整函数对除法运算的结果进行取整而PHP取整数函数常用的四种方法:直接取整...
    99+
    2018-10-30
    php 相除取整
  • php怎么实现数值转字母
    php实现数值转字母的方法:1、创建一个php示例文件;2、定义一个numToExcelLetter方法;3、在方法体内通过“while ($num > 0 ) {$mod = (int)($num % $base);$num = (...
    99+
    2023-05-14
    字母 数值 php
  • php怎么实现转成byte数组
    本文操作环境:Windows7系统、PHP7.1版、DELL G3电脑php怎么实现转成byte数组?php转换byte[]数据类型代码如下:<php class Bytes { public static func...
    99+
    2017-07-11
    php
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作