栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何从二进制转换IPv6以存储在MySQL中

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何从二进制转换IPv6以存储在MySQL中

这是我现在用来将IP地址与DECIMAL(39,0)格式之间相互转换的函数。它们分别被命名为inet_ptod和inet_dtop,以表示“十进制表示”和“十进制表示”。它需要PHP中的IPv6和bcmath支持。

function inet_ptod($ip_address){    // IPv4 address    if (strpos($ip_address, ':') === false && strpos($ip_address, '.') !== false) {        $ip_address = '::' . $ip_address;    }    // IPv6 address    if (strpos($ip_address, ':') !== false) {        $network = inet_pton($ip_address);        $parts = unpack('N*', $network);        foreach ($parts as &$part) { if ($part < 0) {     $part = bcadd((string) $part, '4294967296'); } if (!is_string($part)) {     $part = (string) $part; }        }        $decimal = $parts[4];        $decimal = bcadd($decimal, bcmul($parts[3], '4294967296'));        $decimal = bcadd($decimal, bcmul($parts[2], '18446744073709551616'));        $decimal = bcadd($decimal, bcmul($parts[1], '79228162514264337593543950336'));        return $decimal;    }    // Decimal address    return $ip_address;}function inet_dtop($decimal){    // IPv4 or IPv6 format    if (strpos($decimal, ':') !== false || strpos($decimal, '.') !== false) {        return $decimal;    }    // Decimal format    $parts = array();    $parts[1] = bcdiv($decimal, '79228162514264337593543950336', 0);    $decimal = bcsub($decimal, bcmul($parts[1], '79228162514264337593543950336'));    $parts[2] = bcdiv($decimal, '18446744073709551616', 0);    $decimal = bcsub($decimal, bcmul($parts[2], '18446744073709551616'));    $parts[3] = bcdiv($decimal, '4294967296', 0);    $decimal = bcsub($decimal, bcmul($parts[3], '4294967296'));    $parts[4] = $decimal;    foreach ($parts as &$part) {        if (bccomp($part, '2147483647') == 1) { $part = bcsub($part, '4294967296');        }        $part = (int) $part;    }    $network = pack('N4', $parts[1], $parts[2], $parts[3], $parts[4]);    $ip_address = inet_ntop($network);    // Turn IPv6 to IPv4 if it's IPv4    if (preg_match('/^::d+.d+.d+.d+$/', $ip_address)) {        return substr($ip_address, 2);    }    return $ip_address;}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/411634.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号