探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法

yipeiwu_com7年前PHP代码库

【造成原因】:Because PHP's integer type is signed, and many IP addresses will result in negative integers.
【解决办法】:其官方手册中提到,可以“you need to use the "%u" formatter of sprintf() or printf() to get the string representation of the unsigned IP address”
即,printf( '%u', ip2long( 'IP地址' ) );
或者将其先转换为二进制然后在转换为十进制,bindec( decbin( ip2long( 'IP地址' ) ) );
【测试】
$strIp = '182.118.0.0';

echo ip2long($strIp); //此时输出的-1233780736
echo '<br/>';
echo bindec( decbin( ip2long( $strIp ) ) ); // 输出3061186560,与MySQL函数输出一致~

【注】:
number bindec ( string $binary_string ); //二进制转换为十进制
string decbin ( int $number ); //十进制转换为二进制

以上这篇探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持【宜配屋www.yipeiwu.com】。

相关文章

教大家制作简单的php日历

教大家制作简单的php日历

最近的一个项目中,需要将数据用日历方式显示,网上有很多的JS插件,后面为了自己能有更大的控制权,决定自己制作一个日历显示。如下图所示: 一、计算数据 1、new一个Calendar类...

中英文字符串翻转函数

复制代码 代码如下:<?php //页面编码设为utf8 header('Content-type: text/html; charset=utf-8'); $luokuan =...

linux iconv方法的使用

参考phpinfo的信息,iconv模块也已经正确加载。 google一下。原来才知道,原来在linux版本下iconv这个方法还是有点下下问题的。 csdn上的一个网友给出的解决方案为...

php存储过程调用实例代码

复制代码 代码如下: //比如要调用的存储过程为gxtj(a,b) $db=new mysqli("localhost","ssss","aaaaa","bbbb"); mysqli_q...

由php中字符offset特征造成的绕过漏洞详解

php中的字符offset特性 php中的字符串存在一个非常有趣的特性,php中的字符串也可以像数组一样进行取值。 $test = "hello world"; echo $test...