>  기사  >  백엔드 개발  >  PHP ip2long에 왜 음수가 있습니까? 어떻게 해결하나요?

PHP ip2long에 왜 음수가 있습니까? 어떻게 해결하나요?

青灯夜游
青灯夜游앞으로
2020-07-17 15:57:302782검색

PHP ip2long에 왜 음수가 있습니까? 어떻게 해결하나요?

php는 IP 주소를 처리하는 ip2long 및 long2ip 방법을 제공합니다.

1.ip2long - IPV4 문자열 인터넷 프로토콜을 디지털 형식으로 변환합니다.

int ip2long ( string $ip_address )

매개변수: ip_address 표준 형식의 주소입니다.

반환 값: IP 주소의 변환된 숫자를 반환하거나 ip_address가 잘못된 경우 FALSE를 반환합니다.

2, long2ip - 숫자 형식을 IPV4 인터넷 프로토콜의 문자열로 변환합니다.

string long2ip ( string $proper_address )

매개변수: proper_address 긴 정수의 올바른 주소 표현입니다.

반환 값: 인터넷 주소를 문자열로 반환합니다.

3. Usage

$ip = '10.1.1.1';
$ip_long = ip2long($ip);
echo $ip_long.PHP_EOL; // 167837953
echo long2ip($ip_long); // 10.1.1.1

4. 음수가 발생하는 이유와 해결 방법

IP 주소가 상대적으로 크면 ip2long에 음수가 표시됩니다:

$ip = '192.168.101.100';
$ip_long = ip2long($ip);
echo $ip_long.PHP_EOL; // -1062705820
echo long2ip($ip_long); // 192.168.101.100

원인 설명:

IPv4는 서명되지 않음을 사용합니다. 32비트 주소이므로 최대 2의 32승 - 1(4294967295) 주소가 있습니다. 소수점 4자리로 구분하여 십진수를 씁니다.

A.B.C.D로 표시됩니다(예: 192.168.100.100).

IPv4 주소의 각 10진수는 0부터 255까지의 부호 없는 바이트입니다. IPv4 주소를 부호 없는 숫자로 변환한다는 것은 실제로 각 10진수를 해당 8비트에 배치하는 것을 의미합니다. 4바이트 부호 없는 정수를 형성합니다. 192.168.100.100, 상위 8자리는 192,168, 하위 8자리는 100,100입니다.

해결책:

출력할 때 %u를 사용하여 부호 없는 정수로 형식을 지정하세요.

$ip = '192.168.101.100';
$ip_long = sprintf('%u',ip2long($ip));
echo $ip_long.PHP_EOL; // 3232261476 
echo long2ip($ip_long); // 192.168.101.100

추천 관련 튜토리얼: "PHP Tutorial"

위 내용은 PHP ip2long에 왜 음수가 있습니까? 어떻게 해결하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제