ip2long-long2ip

WBOY
풀어 주다: 2016-07-29 09:14:45
원래의
2691명이 탐색했습니다.

1. 수요 이유

IP 주소를 정수 저장소로 변환하는 것은 데이터베이스 최적화에 매우 중요합니다. 많은 사람들이 IP 주소를 문자열 형식으로 저장합니다. 데이터 양이 많으면 리소스 소모가 심해집니다. 게다가 index를 reshaping하는 속도는 문자열 index보다 훨씬 빠르기 때문에 저장소를 reshape하려면 ip를 사용하고, 사용할 때는 다시 ip로 reshape해야 한다. PHP의 IP 변환에 대해 이 글에서는 ipv4에 대해 설명하고, ipv6에 대해서는 설명하지 않겠습니다.

2. 시스템 내장 기능

IP 변환 및 Shaping에 사용되는 기능은 ip2long

예:

$ip=” 60.6.205.138”;

echo ip2long($ip);
로그인 후 복사

플라스틱에서 IP를 변환하는 데 사용되는 기능은 다음과 같습니다. long2ip

예:

$ip=”60.6.205.138”;

$ipInt=ip2long($ip);

echo long2ip($ipInt);
로그인 후 복사

3. >

1. IP 주소가 상대적으로 큰 경우 변환된 정수가 최대 성형 범위를 초과할 수 있습니다. 부호 있는 정수의 최대값은 2147483647입니다. 이 값을 초과하면 음수가 됩니다.

해결 방법: $ip = binec(decbin(ip2long($ip)));

쓰기:

$ip = "192.168.10.1":

$ip= bindec(decbin(ip2long($ip)));

echo $ip;
로그인 후 복사

설명: decbin 함수는 10진수를 2진수로 변환하고, binec 함수 이진수를 정수로 변환합니다.

2. 일부 IP 주소에 접두사 0이 있으면 변환이 잘못됩니다.

예:

$ip = '021.110.11.49';

$ip_int = ip2long($ip);

echo $ip."<br />";

echo $ip_int."<br />";

echo long2ip($ip_int);
로그인 후 복사

IP를 재구성으로 변환할 때 IP를 다시 변환하면 오류가 발생하며 IP 주소가 원래 주소와 일치하지 않습니다. 그 이유는 선행 0이 있기 때문입니다.

해결책:

첫째, IP 변환 셰이핑은 다음을 기반으로 하기 때문입니다. 첫 번째 세그먼트에 256의 세제곱을 곱하고, 두 번째 세그먼트에 256의 제곱을 곱합니다. 세 번째 세그먼트에 256의 세제곱을 곱하고 세그먼트에 256을 곱하여 최종 합계를 얻습니다.


$ip = '060.06.205.138';

function ipToInt($ip){

$iparr = explode('.',$ip);

$num = 0;

for($i=0;$i<count($iparr);$i++){

$num += intval($iparr[$i]) *pow(256,count($iparr)-($i+1));

}

return $num;

}

echo $ip.'<br />';
로그인 후 복사

설명:

intval은 변수를 정수 유형으로 변환합니다.

pow(4, 2 ) 16을 반환하고 x의 y제곱을 반환합니다.

초, 비트 연산자로 푼다.

$ip = '060.06.205.138'; 

function ipToInt($ip){

$iparr = explode('.',$ip);

return (intval($iparr[0]<<24))|(intval($iparr[1])<<16)|(intval($iparr[2])<<8)| (intval($iparr[3]));
} 
echo  $ip.'<br />';

$ipInt = ipToInt($ip);

echo $ipInt.'<br />';

echo long2ip($ipInt);
로그인 후 복사
비트 연산자 알고리즘은 단순히 현재 숫자를 왼쪽으로 3비트 이동하고 현재 숫자에 2의 세제곱을 곱하고 왼쪽 비트를 2비트에 2의 제곱을 곱합니다. 오른쪽 시프트 연산은 지정된 비트 수만큼 이진 비트 피연산자를 오른쪽으로 이동하는 것입니다. 시프트된 비트는 머신에 따라 0 또는 부호 비트로 채워집니다. .

이해가 되지 않는다면 첫 번째 방법을 따라가시면 됩니다.

궁금하신 점은 메시지 남겨주시면 함께 논의해보도록 하겠습니다. 더 많이 연습해서 인상도 깊어졌으면 좋겠어요!


위에서는 ip2long-long2ip에 대한 내용을 소개했는데, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

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