ip转换
/** * ip转换整型 * @param int|string|null $ip ip地址 * @return int|string|null */ function my_ip2long($ip) { $res = false; if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { $res = sprintf('%u', ip2long($ip)); } else if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { $ip_n = inet_pton($ip); $bits = 15; $ipv6long = ''; while ($bits >= 0) { $bin = sprintf('%08b', (ord($ip_n[$bits]))); $ipv6long = $bin . $ipv6long; $bits--; } $res = gmp_strval(gmp_init($ipv6long, 2), 10); } if ($res) { return $res; } else { return 0; } } /** * 整型转换ipv6 * @param null|int|string $ip ip地址 * @return string */ function my_long2ip($ip) { if (empty($ip)) { return ''; } $bin = gmp_strval(gmp_init($ip, 10), 2); if (strlen($bin) < 128) { $pad = 128 - strlen($bin); for ($i = 1; $i <= $pad; $i++) { $bin = '0' . $bin; } } $bits = 0; $ipv6 = ''; while ($bits <= 7) { $bin_part = substr($bin, ($bits * 16), 16); $ipv6 .= dechex(bindec($bin_part)) . ':'; $bits++; } $res = inet_ntop(inet_pton(substr($ipv6, 0, -1))); if ($res) { // ipv4一定包含3个.号 if (substr_count($res, '.') === 3) { $res = str_replace(':', '', $res); } return $res; } else { return '0'; } }
标签:bin,gmp,return,ip,地址,res,PHP,bits From: https://www.cnblogs.com/shemmor/p/18424083