获取ip地址与ip地址字符串转为10位数整形,原生php代替函数ip2long()和long2ip

/**

  • @param $ip
  • @return int
  • 代替php原函数ip2long()
  • 十进制最大值是255,超过是不合法的ip,直接返回
  • 每个ip段的值最大为255,十六进制为FF,故最长是两位,
  • 例IP = 1.1.1.1 如果不补0,则十六进制为 1111,十进制为 4369
  • 补0为 十六进制为 01010101,十进制为 16843009
  • 如果十六进制长度小于2,则自动补0
  • hexdec($newHex) 十六进制转为十进制,dechex($value);将十进制ip段转为十六进制
    */

function ipToInt($ip) {

$newHex = '';
$aIp = explode('.', $ip);
foreach ($aIp as $key => $value) {
    if($value > 255) return '';
    $hex = dechex($value);
    if(strlen($hex) < 2) $hex = '0'.$hex;
    $newHex .= $hex;
}
$int = hexdec($newHex);//十六进制转为十进制
return $int;

}

/**

  • @param $int
  • @return string
  • 代替php原函数long2ip()
  • FFFFFF最大为4294967295
  • 十六进制默认会忽略最左边的0,毕竟是0了,怎么算都是0,留着也没用
  • 但中间的0会保留,而IP的十六进制最大为FFFFFF(大F团)
  • 所有为防止7位IP的出现,我们只能手动补0,才能成双成对(2个一对)
  • 截取十六进制的第一位,如果第一位为0,说明原始数值只有1位,还是要拆散
  • dechex($int);十进制转为十六进制 , hexdec($hex);将每段十六进制数转换我为十进制,即每个ip段的值
    */

function intToIp($int) {

$aIp = array();
$int = $int > 4294967295 ? 4294967295 : $int;
$dec = dechex($int);
if(strlen($dec) < 8) $dec = '0'.$dec;
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);
    $aIp[] = hexdec($hex);
}
return implode('.',$aIp);

}

标签: PHP

WeChatPay

微信打赏

Alipay

支付宝打赏

如果对你也有帮助,随便来个五毛的吧,一切随缘看心情...

空空如也