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;
예:
$ip = '021.110.11.49'; $ip_int = ip2long($ip); echo $ip."<br />"; echo $ip_int."<br />"; echo long2ip($ip_int);
첫째, 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);