>백엔드 개발 >PHP 문제 >PHP IP를 숫자로 변환하는 방법

PHP IP를 숫자로 변환하는 방법

藏色散人
藏色散人원래의
2020-11-01 13:58:083161검색

php ip를 숫자로 변환하는 방법: 1. PHP 함수 ip2long 함수와 sprintf 함수를 사용하여 변환합니다. 2. "gmp_strval(gmp_init($ipv6long,2),10)" 메서드를 통해 변환합니다.

PHP IP를 숫자로 변환하는 방법

권장: "PHP 비디오 튜토리얼"

IP를 PHP에서 숫자로 변환(ipv4/ipv6)

요구 사항: ipv4 또는 ivp6의 IP 주소를 숫자로 변환하고 데이터베이스에 저장

1. ipv4를 숫자(양의 정수)로 변환:

ipv4는 PHP 자체 함수 ip2long() 함수와 sprintf() 함수를 결합하여 직접 변환할 수 있습니다. 코드는 다음과 같습니다.

$ip = '202.203.44.225';
$ipToInt = sprintf('%u',ip2long($ip)); // 结果为:3402312929
echo "ip '202.203.44.225' to int is: ".$ipToInt;

결과는 다음과 같습니다.

PHP IP를 숫자로 변환하는 방법

ip2long() 함수는 ip를 긴 정수로 변환하지만 일부 ip는 ip:와 같이 긴 정수로 변환하면 복소수가 되므로 sprintf() 함수를 사용하여 배열을 양수로 변환해야 합니다. 정수. 복소수를 양의 정수로 변환하는 방법은 여러가지가 있지만 저는 sprintf()가 가장 편리한 방법이라고 생각하므로 여기서는 sprintf()를 사용하는 것을 추천합니다. 또한 음수를 변환하는 데 abs() 함수를 사용하지 말 것을 모든 사람에게 상기시킵니다. 변환된 결과에는 다음과 같은 특정 차이가 있기 때문입니다.

$ip = '192.168.101.100';
$ip2int = ip2long($ip); 
echo abs($ip2int).&#39;<br/>&#39;; // 结果为:1062705820
echo sprintf(&#39;%u&#39;,$ip2int); // 结果为:3232261476

2. ipv6를 숫자(양의 정수)로 변환:

IP 주소의 경우 ipv6 형식에서는 ip2long() 함수를 사용하여 직접 변환할 수 없으며 다른 방법을 통해서만 변환할 수 있습니다. 아래에서는 네티즌 Weissner가 PHP 매뉴얼(http://php.net/manual/zh/function)에 남긴 내용을 게시합니다. .ip2long.php#94477) 여기에 해결책이 있습니다. 그 전에 php.ini 파일에서 Extension=php_gmp.dll 앞의 주석 기호 ';'를 제거해야 한다는 사실에 모두 주의해야 합니다. 확장에서 코드에 사용됩니다. .

ipv6를 숫자로 변환하는 코드는 다음과 같습니다.

$ipv6 = &#39;FEDC:BA98:7654:3210:FEDC:BA98:7654:3210&#39;;
$ip_n = inet_pton($ipv6);
$bits = 15; // 16 x 8 bit = 128bit
$ipv6long=&#39;&#39;;
while ($bits >= 0) {
        $bin = sprintf("%08b",(ord($ip_n[$bits])));
        $ipv6long = $bin.$ipv6long;
        $bits--;
}
echo gmp_strval(gmp_init($ipv6long,2),10); // 结果为:338770000845734292534325025077361652240

보시다시피 ipv6 주소를 숫자로 변환한 후에는 38개의 숫자가 있고 데이터베이스의 bigint는 저장할 수 없으므로 여전히 데이터베이스 유형 변환의 필드를 char 또는 varchar 유형으로 변환합니다.

첨부된 코드는 IP가 ivp4인지 ipv6인지 확인하고 해당 IP를 디지털 형식으로 변환하는 코드입니다:

$ip = &#39;192.168.101.100&#39;;
//$ip = &#39;FEDC:BA98:7654:3210:FEDC:BA98:7654:3210&#39;;
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
    echo sprintf(&#39;%u&#39;,ip2long($ip));exit;
 
} else if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
 
$ip_n = inet_pton($ip);
$bits = 15; // 16 x 8 bit = 128bit
$ipv6long=&#39;&#39;;
    while ($bits >= 0) {
        $bin = sprintf("%08b",(ord($ip_n[$bits])));
        $ipv6long = $bin.$ipv6long;
        $bits--;
    }
    echo gmp_strval(gmp_init($ipv6long,2),10);exit;
}

위 내용은 PHP IP를 숫자로 변환하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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