IPv6 표기가 이상합니다..ㅠㅠ
이윰빌더를 사용하고 있고요.. 회원정보에서 아이피를 불러오는데..
IPv4 아이피는 정상적으로 나오는데..
IPv6 아이피가.. 이런식으로 나오네요
24065900900641079798149
이걸 어떻게 해야될지 감이 안오네요..;;
IPv4 아이피는 정상적으로 나오는데..
IPv6 아이피가.. 이런식으로 나오네요
24065900900641079798149
이걸 어떻게 해야될지 감이 안오네요..;;
|
답변 1개
Copy
function normalizeIp($input) {
$input = trim($input);
// 1. IPv4 (일반 형식)
if (filter_var($input, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
return $input;
}
// 2. IPv6 (일반 형식)
if (filter_var($input, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
return $input;
}
// 3. 숫자만 있는 경우 (정수형 IP 판단)
if (ctype_digit($input)) {
// --- IPv4 정수 범위 ---
if (bccomp($input, "4294967295") <= 0) {
// IPv4 정수 → IPv4
return long2ip((int)$input);
}
// --- IPv6 정수 범위 ---
// 2^128 - 1
$maxIpv6 = "340282366920938463463374607431768211455";
if (bccomp($input, $maxIpv6) <= 0) {
// IPv6 정수 → IPv6
$hex = base_convert($input, 10, 16);
// base_convert는 큰 수 부정확 → BCMath로 보정
$hex = '';
$num = $input;
while (bccomp($num, "0") > 0) {
$mod = bcmod($num, "16");
$hex = dechex((int)$mod) . $hex;
$num = bcdiv($num, "16", 0);
}
$hex = str_pad($hex, 32, '0', STR_PAD_LEFT);
$bin = hex2bin($hex);
return inet_ntop($bin);
}
}
// 4. 그 외
return "아이피 주소 형식 아님";
}
echo normalizeIp("192.168.0.1");
// → 192.168.0.1
echo normalizeIp("3232235521");
// → 192.168.0.1
echo normalizeIp("2001:db8::1");
// → 2001:db8::1
echo normalizeIp("24065900900641079798149");
// → (IPv6 주소로 변환됨)
echo normalizeIp("hello");
// → 아이피 주소 형식 아님
답변을 작성하려면 로그인이 필요합니다.