日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

【PHP】IPv4与整数转换、IPv6与整数转换

發(fā)布時(shí)間:2025/3/20 php 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【PHP】IPv4与整数转换、IPv6与整数转换 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

inet_pton:將可讀的IP地址轉(zhuǎn)換為其壓縮的in_addr表示形式

inet_ntop:將打包的Internet地址轉(zhuǎn)換為可讀的表示形式

inet_ntop(inet_pton($ip));


IPv4 與整數(shù)互轉(zhuǎn)

/*** 代替 long2ip 函數(shù)* @param $ip* @return string * */ function convertIpToString($ip) { $long = 4294967295 - ($ip - 1);return long2ip(-$long); }/*** 代替 ip2long 函數(shù)* @param $ip* @return string * */ function convertIpToLong($ip) {return sprintf("%u", ip2long($ip)); }$ip_long = $this->convertIpToLong('192.168.8.30'); $long_ip = $this->convertIpToString($ip_long); echo $ip_long; // 3232237598 echo $long_ip; // 192.168.8.30

IPv6 與整數(shù)互轉(zhuǎn)

/*** IPV6 地址轉(zhuǎn)換為整數(shù)* @param $ipv6* @return string * */function ip2long6($ipv6) {$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--;}return gmp_strval(gmp_init($ipv6long, 2), 10); } /*** 數(shù)字轉(zhuǎn)為IPv6地址* 數(shù)字長度38位*/ function long2ip_v6($dec) {if (function_exists('gmp_init')) {$bin = gmp_strval(gmp_init($dec, 10), 2); //10進(jìn)制 -> 2進(jìn)制} elseif (function_exists('bcadd')) {$bin = '';do {$bin = bcmod($dec, '2') . $bin; //10進(jìn)制 -> 2進(jìn)制,獲取$dec/2的余數(shù)$dec = bcdiv($dec, '2', 0); // dec/2的值,0表示小數(shù)點(diǎn)后位數(shù)} while (bccomp($dec, '0'));} else {// trigger_error('GMP or BCMATH extension not installed!', E_USER_ERROR);return 'GMP or BCMATH extension not installed!';}$bin = str_pad($bin, 128, '0', STR_PAD_LEFT); // 給2進(jìn)制值補(bǔ)0$ip = array();for ($bit = 0; $bit <= 7; $bit++) {$bin_part = substr($bin, $bit * 16, 16); // 每16位分隔$ip[] = dechex(bindec($bin_part)); // 2進(jìn)制->10進(jìn)制->16進(jìn)制}$ip = implode(':', $ip);// inet_pton:將可讀的IP地址轉(zhuǎn)換為其壓縮的in_addr表示形式// inet_ntop:將打包的Internet地址轉(zhuǎn)換為可讀的表示形式return inet_ntop(inet_pton($ip)); }// 測試 $ip6_long = $this->ip2long6('2001:4860:a005::68'); $long_ip6 = $this->long2ip6($ip6_long); echo $ip6_long; // 42541956150894553250710573749450571880 echo $long_ip6; // 2001:4860:a005::68

參考鏈接

https://www.w3xue.com/exp/article/201811/6927.html

總結(jié)

以上是生活随笔為你收集整理的【PHP】IPv4与整数转换、IPv6与整数转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。