>  기사  >  백엔드 개발  >  PHP ipv6 형식을 변환하는 방법

PHP ipv6 형식을 변환하는 방법

藏色散人
藏色散人원래의
2021-07-19 09:45:462825검색

php ipv6 형식 변환 방법: 먼저 PHP 샘플 파일을 만든 다음 "$ipv6"을 정의하고 마지막으로 "gmp_strval(gmp_init($ipv6long,2),10)"을 사용하여 ipv6을 숫자로 변환합니다.

PHP ipv6 형식을 변환하는 방법

이 기사의 운영 환경: windows7 시스템, PHP7.1 버전, DELL G3 컴퓨터

php ipv6 형식을 변환하는 방법은 무엇입니까?

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

ivp6 IP 주소를 숫자로 변환하고 데이터베이스에 저장하세요.

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

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

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

$ipv6 = 'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210';
$ip_n = inet_pton($ipv6);
$bits = 15; // 16 x 8 bit = 128bit
$ipv6long='';
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 = '192.168.101.100';
//$ip = 'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210';
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
    echo sprintf('%u',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='';
    while ($bits >= 0) {
        $bin = sprintf("%08b",(ord($ip_n[$bits])));
        $ipv6long = $bin.$ipv6long;
        $bits--;
    }
    echo gmp_strval(gmp_init($ipv6long,2),10);exit;
}

추천 학습: "PHP 비디오 튜토리얼"

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

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