• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
merize
博客园    首页    新随笔    联系   管理    订阅  订阅

php手动实现ip2long和long2ip

php手动实现ip2long和long2ip

    /**
     * 测试
     */
    public function testipAction() {
        $ip = '10.58.101.175';
        echo ip2long($ip);
        echo "<br>";
        echo $this->myip2long($ip);
        echo "<br>";
        echo long2ip('171599279');
        echo "<br>";
        echo $this->mylong2ip('171599279');
    }

    /**
     * 自己实现ip2long
     * @param $ip
     * @return float|int|string
     */
    protected  function myip2long($ip) {
        $newhex = '';
        // 将ip分割成数组
        $ipsArr = explode('.', $ip);
        foreach ($ipsArr as $key => $value) {
            // 十进制最大值是255,如果超过,则直接返回
            if ($value > 255) {
                return '';
            }
            // 将十进制转化为十六进制
            $hex = dechex($value);
            // 每个ip最大是255,十六进制是FF,最大是两位
            // 比如ip:1.1.1.1如果不补0,则十六进制是1111,十进制是4369
            // 如果补0,则十六进制是01010101,十进制是16843009
            if (strlen($hex) < 2) {
                // 如果十六进制长度小于2,则自动补0
                $hex = '0' . $hex;
            }
            $newhex .= $hex;
        }
        // 十六进制转化为十进制
        $intStr = hexdec($newhex);
        return $intStr;
    }

    /**
     * 自己实现long2ip
     * @param $int
     * @return string
     */
    protected function  mylong2ip($int) {
        //  FFFFFF最大为4294967295
        $int = $int >  4294967295  ? 4294967295  : $int;
        // 将十进制转为十六进制
        $hex = dechex($int);
        //为了避免7位ip出现,我们手动补0
        if (strlen($hex) < 8) {
            // 长度小于8,则自动补0
            $hex = '0'. $hex;
        }
        // 每两位进行分组。然后查看每组的第一位是否是0,如果是则去掉。然后把得到的值转为十进制,放在数组中,最后把数组用.连接起来
        for ($i =0; $i<8;$i+=2) {
            $a = substr($hex, $i, 2);
            $ippart = substr($a, 0, 1);
            if ($ippart === '0') {
                $a = substr($a, 1, 1);
            }
            $aparr[] = hexdec($a);
        }
        return implode('.', $aparr);
    }

 

posted @ 2019-11-04 17:43  sukii  阅读(449)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3