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

青灯夜游
풀어 주다: 2023-04-09 09:14:01
앞으로
2833명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:cnblogs.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!