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