Jtti广告广告
返回顶部
首页 > 资讯 > 后端开发 > 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

猜你喜欢
  • php如何实现ip转整数
    这篇文章主要讲解了“php如何实现ip转整数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php如何实现ip转整数”吧!php实现ip转整数的方法:1、创建一个PHP示例文件;2、通过“ip...
    783
    2023-10-01
  • golang 浮点转整数
    Golang 是一门具有高性能的编程语言,支持多种数据类型,包括浮点数和整数。在实际开发中,我们有时需要将浮点数转换为整数,以便进行一些计算和处理。本文将介绍 Golang 中浮点数转整数的方法和技巧。强制类型转换Golang 中可以使用强...
    478
    2023-10-01
  • php整数反转该怎么实现
    这篇文章将为大家详细讲解有关php整数反转该怎么实现,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。php实现整数反转的方法:1、创建一个PHP示例文件;2、通过“function rever...
    704
    2023-10-01
  • php如何实现IP地址和整数的转换
    今天小编给大家分享一下php如何实现IP地址和整数的转换的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。IP地址是计算机互联网...
    754
    2023-10-01
  • php整数转字符串函数有哪些
    这篇文章将为大家详细讲解有关php整数转字符串函数有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php将整数转为字符串的函数有:1、strval()函数,该函数可以获取变量的字符串值,语法格式“st...
    771
    2023-10-01
  • php怎么实现需要取相除的整数
    在PHP中,如果需要取相除的整数,我们可以使用PHP内置函数 intdiv(),该函数可以在PHP7及更高版本中使用。在本文中,我们将探讨如何使用 intdiv() 函数以及如何在PHP5中模拟此功能。PHP7版本简介intdiv() 函数...
    713
    2023-10-01
  • php怎么实现字符转电码
    本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。php怎么实现字符转电码?开通标准电码查询API接口:通过https://www.juhe.cn/docs/api/id/211s=cpphpcn注册及开通接口说明:...
    674
    2023-10-01
    电码 字符 php
  • php怎么实现数值转字母
    php实现数值转字母的方法:1、创建一个php示例文件;2、定义一个numToExcelLetter方法;3、在方法体内通过“while ($num > 0 ) {$mod = (int)($num % $base);$num = (...
    806
    2023-10-01
    字母 数值 php
  • PHP怎么实现Word转PDF
    本篇内容介绍了“PHP怎么实现Word转PDF”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!PHP处理Word转PDF代码示例:<&n...
    584
    2023-10-01
  • php如何将2.131转换成整数
    这篇文章主要讲解了“php如何将2.131转换成整数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php如何将2.131转换成整数”吧!php将2.131转换成整数的方法:1、使用floor...
    314
    2023-10-01
  • ip转10进制
    前言 最近需要方便ip存储和查询,所有的数据都转换为10进制,今天就来记录一下,方便以后也进行操作,处理数据也会方便很多 php的ip十进制转换 第一种方法 public function ipT...
    551
    2023-10-01
    tcp/ip php 网络协议
  • php怎么实现日期转礼拜几
    php实现日期转礼拜几的方法:1、创建一个php示例文件;2、通过“date("l");”方法获取英文星期几;3、定义一个数组,然后通过“$weekarray[date("w",time())];”方...
    241
    2023-10-01
    php
  • php ci怎么实现中文转拼音
    在全球化的今天,我们常常需要将中文转换成拼音来方便外籍人士学习汉语,或者方便分析处理中文数据。在网站开发中,我们也经常需要将中文转换成拼音来实现各种功能。在PHP CI中,我们可以使用一些第三方插件来实现中文转拼音的功能。一、准备工作要实现...
    345
    2023-10-01
  • php怎么实现全角符号转半角
    小编给大家分享一下php怎么实现全角符号转半角,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php实现全角符号转半角的方法:首先创建一个PHP示例文件;然后定义一...
    119
    2023-10-01
  • PHP怎么计算整数除法的
    小编给大家分享一下PHP怎么计算整数除法的,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1.语法    intdiv(divident, divisor);2.示例<...
    745
    2023-10-01
  • 怎么解决PHP大整数问题
    这篇文章主要介绍“怎么解决PHP大整数问题”,在日常操作中,相信很多人在怎么解决PHP大整数问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么解决PHP大整数问题”的疑惑有所帮助!接下来,请跟着小编一起来...
    764
    2023-10-01
  • PHP如何实现除法取整数
    这篇文章主要介绍PHP如何实现除法取整数,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!方案解决目标:对一个数进行除法取整数1.round — 对浮点数进行四舍五入float roun...
    361
    2023-10-01
    php
  • C#算法之罗马数字转整数
    罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I ...
    762
    2023-10-01
    C#算法罗马数字转整数 C# 罗马数字转整数
  • PHP 实现PDF转图片
    目录 1.环境配置: 2.实现原理: 3.安装php扩展imagick 4.安装ghostscript 5.pdf转图片 1.环境配置: 2.实现原理: Php使用扩展插件imagick进行图片处理,处理pdf时使用imagick去调...
    359
    2023-10-01
    pdf
  • php怎么实现图片格式转jpg
    图片格式转JPG:使用PHP图片是我们网站和应用程序中的基本元素之一。但是,有时候我们需要将图片转换为其他格式。其中,将图片转换为JPG格式是最常见的需求之一。在这篇文章中,我们将学习如何使用PHP语言将图片转换为JPG格式。为什么要将图片...
    405
    2023-10-01
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作