>  기사  >  백엔드 개발  >  PHP에서 IP 주소 처리

PHP에서 IP 주소 처리

韦小宝
韦小宝원래의
2017-12-02 10:54:322223검색

개발 중에는 항상 ip주소를 다루며, 일반적으로 사용되는 functions.php에서는 IP 주소를 처리하는 ip2long 및 long2ip 메서드를 제공합니다. 오늘은 PHP에서 ip처리 방법을 자세히 살펴보겠습니다. 더 나아가, PHP에서 ip의 주소 처리 방법을 살펴보겠습니다!

개발 중에는 항상 IP 주소를 다루게 되는데, PHP에서는 IP 주소를 처리하기 위해 ip2long과 long2ip 메소드를 주로 사용합니다.

ip2long은 IPV4를 string인터넷 프로토콜을 디지털 형식으로 변환합니다

int ip2long ( string $ip_address )
//参数: ip_address 一个标准格式的地址。
//返回值: 返回IP地址转换后的数字 或 FALSE

long2ip는 디지털 형식을 IPV4 문자열 인터넷 프로토콜로 변환합니다

string long2ip ( string $proper_address )
//参数: proper_address 长整型的正确地址表示。
//返回值: 返回互联网地址作为字符串。

IP 주소를 데이터베이스에 저장할 때 ip2long 함수를 사용할 수 있습니다. IP 주소를 문자열에서 긴 형식으로 변환하면 저장 공간을 절약할 수 있으며, IP 주소를 꺼낼 때 long2ip를 사용하여 IP 주소를 복원할 수 있습니다. 변환 후에는 다음과 같이 IP 주소가 범위 내에 있는지 판단하는 것이 더 편리합니다.

$a=ip2long('127.0.0.66');
$b=ip2long('127.0.0.111');
$c=ip2long('127.0.0.10');
if($c>=$a && $c <=$b){
echo &#39;呜啦啦&#39;;
}else{
echo &#39;啦啦呜&#39;;
}

하지만 주의가 필요합니다! ! ! 참고 참고 참고

IP를 정수형으로 변환하는 PHP의 ip2long() 함수는 IP가 상대적으로 크면 음수가 되기 쉽습니다.

왜? 답은 여기에 있습니다!

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입니다.


다음은

<?php
$ip = "192.168.1.2";
$ip_n = ip2long($ip);
echo $ip_n;      //输出的是个负数 -1062731518
?>

IP에서 변환한 정수값이 너무 커서 정수의 범위를 초과하기 때문에 음수가 됩니다.

$ip_n = bindec(decbin(ip2long($ip)));로 작성해야 합니다. 이 방법으로 다음과 같이 부호 없는 정수를 얻을 수 있습니다.

<?php
$ip = "192.168.1.2";
$ip_n = bindec(decbin(ip2long($ip)));
echo $ip_n;      //得到 3232235778
?>

해결책도 있습니다:

%u를 사용하여 출력 형식을 지정합니다. 부호 없는 정수 유형입니다.

<?php
$ip = &#39;192.168.101.100&#39;;
$ip_long = sprintf(&#39;%u&#39;,ip2long($ip));
echo $ip_long.PHP_EOL;  // 3232261476 
echo long2ip($ip_long); // 192.168.101.100
?>

관련 권장 사항:

php ip2long 음수에 대한 이유와 해결 방법

php IP 주소 변환 정수, 정수 변환 주소

php IP Get City API(무고한 IP 데이터베이스)

위 내용은 PHP에서 IP 주소 처리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.