bis-gmbh / ip-addr
管理 IPv4 和 IPv6 地址和子网
Requires
- php: >=5.4.0
- ext-gmp: >=5.4
Requires (Dev)
- phpunit/phpunit: ^5.2
README
安装
使用 composer 安装
composer require bis-gmbh/ip-addr
安装要求
- PHP 版本 5.4 或以上
- PHP GMP 扩展用于 IPv6 随机算术
抽象使用示例
use \BIS\IPAddr\Utils as IP; use \BIS\IPAddr\HostIterator; use \BIS\IPAddr\SubnetIterator; $providerSubnet = IP::make('10.0/8'); $userSubnet = IP::make('10.100.0.2/30'); if ($providerSubnet->contains($userSubnet)) { printf("User network: %s\n", $userSubnet->network()->addr()); printf("User broadcast: %s\n", $userSubnet->broadcast()->addr()); printf("User addrs:\n"); foreach ($userSubnet as $index => $ip) { printf("%d: %s\n", $index, $ip->addr()); } $userHosts = new HostIterator($userSubnet); printf("User hosts:\n"); foreach ($userHosts as $index => $ip) { printf("%d: %s\n", $index, $ip->addr()); } } printf("Provider subnets:\n"); $providerSubnets = new SubnetIterator($providerSubnet, 10); foreach ($providerSubnets as $index => $subnet) { printf("%d: %s\n", $index, $subnet->cidr()); }
将输出
User network: 10.100.0.0
User broadcast: 10.100.0.3
User addrs:
0: 10.100.0.0
1: 10.100.0.1
2: 10.100.0.2
3: 10.100.0.3
User hosts:
0: 10.100.0.1
1: 10.100.0.2
Provider subnets:
0: 10.0.0.0/10
1: 10.64.0.0/10
2: 10.128.0.0/10
3: 10.192.0.0/10
被使用于
API
构造函数
🔹 v4::create | v6::create
描述
public static function create ( $anyFormat [, string $maskString = null ] ) : Address;
参数
- anyFormat
- 整数,例如
123
,0xABCDEF00
,075227
,0b0101010
- 数字字符串,例如
'123'
,'0xABCDEF00'
,'075227'
,'0b0101010'
- 文本格式
- v4,
'192.168.10.1'
,'172.16.3'
,'10.0'
- v6,
'a:b:c:d::'
,'::'
,'::345d:10.40.60.1'
- v4,
- CIDR 格式
- v4,
'10.0.0.0/8'
,'192.168/16'
- v6,
'2000:b:c:d::/64'
,'::1/128'
- v4,
- 范围格式
'<first_addr> - <second_addr>'
,其中<first_addr>
和<second_addr>
- 以相同 ip 版本的文本格式表示的地址- v4
'10.0.0.0 - 10.0.0.255'
- v6
'2000:b:c:d::5d - 2000:b:c:d::ff'
- v4
- 整数,例如
- maskString 网络掩码的文本格式,如果 anyFormat 参数也在文本格式中,则允许
- v4
'255.255.255.0'
,'255.0'
- v6
'ffff:ffff:ffff:ffff::'
- v4
返回值
成功时返回一个 Address
对象
示例
$v4instance = v4::create('127.0.0.1'); $v4subnet = v4::create('192.168.0.1', '255.255.255.0'); $v6instance = v6::create('::1');
🔹 new v4 | new v6
描述
通过使用与 create
方法相同的参数,通过 new 操作符创建一个 Address
实例。
示例
$v4instance = new v4('127.0.0.1'); $v6instance = new v6('::1');
类
方法
🔹 v4::isNumeric | v6::isNumeric
描述
public static function isNumeric ( $value ) : bool;
检查参数 value 是否以数字格式存在。
参数
- value - 已验证的值
返回值
如果 value 以数字格式,则返回 TRUE,否则返回 FALSE。
示例
var_dump(v4::isNumeric(0xFF000000)); var_dump(v4::isNumeric('0xFF000000')); var_dump(v4::isNumeric('abcdef')); var_dump(v4::isNumeric(true));
bool(true)
bool(true)
bool(false)
bool(false)
🔹 v4::isTextual | v6::isTextual
描述
public static function isTextual ( $value ) : bool;
检查参数 value 是否以文本格式存在。
参数
- value - 已验证的值
返回值
如果 value 以文本格式,则返回 TRUE,否则返回 FALSE。
var_dump(v6::isTextual('1111:2222::5555:6666:7777:8888')); var_dump(v6::isTextual('::ffff:2.3.4.0')); var_dump(v6::isTextual('::/')); var_dump(v6::isTextual('::ffff:2.3.4'));
bool(true)
bool(true)
bool(false)
bool(false)
🔹 v4::isCIDR | v6::isCIDR
描述
public static function isCIDR ( $value ) : bool;
检查参数 value 是否以 CIDR 格式存在。
参数
- value - 已验证的值
返回值
如果 value 以 CIDR 格式,则返回 TRUE,否则返回 FALSE。
var_dump(v6::isCIDR('2000:2222::5555:6666:7777:8888/64')); var_dump(v6::isCIDR('::/128')); var_dump(v6::isCIDR('::')); var_dump(v6::isCIDR('::/129'));
bool(true)
bool(true)
bool(false)
bool(false)
🔹 v4::isRange | v6::isRange
描述
public static function isRange ( $value ) : bool;
检查参数 value 是否以范围格式存在。允许地址的任何顺序 - 直接或反向,例如 '10.0.0.255 - 10.0.0.0'
是允许的范围。
参数
- value - 已验证的值
返回值
如果 value 以范围格式,则返回 TRUE,否则返回 FALSE。
示例
var_dump(v4::isRange('10.0 - 10.10')); var_dump(v4::isRange('192.168.0.1- 192.168.255.255')); var_dump(v4::isRange('127.0.0.0-')); var_dump(v4::isRange('127.0.0.0-::1'));
bool(true)
bool(true)
bool(false)
bool(false)
实例
属性
🔸 v4::$privateNetworks
描述
如 rfc1918 中所述的私有 v4 网络数组。
🔸 v4::$multicastNetworks
描述
如 rfc3171 中所述的组播 v4 网络数组。
🔸 v4::$reservedNetworks
描述
如 RFC 1112,第 4 节 中所述的保留 v4 网络数组。
🔸 v4::$networkTypes
描述
表示具有其描述的特殊用途 v4 地址的关联数组的数组,如 rfc5735 中所述。
🔸 v6::$addressTypes
描述
表示 v6 地址类型及其描述的关联数组的数组,如 rfc4291 中所述。
方法
🔹 v4::version | v6::version
描述
public function version ( void ) : int;
返回值
返回当前对象地址的版本号。
示例
var_dump(v4::create('10.0.0.0')->version()); var_dump(v6::create('::1')->version());
int(4)
int(6)
🔹 v4::assign | v6::assign
描述
public static function assign ( $anyFormat [, string $maskString = null ] ) : Address;
为当前对象分配新的地址和掩码值。
参数
请参阅 create 方法。
示例
$ip = v4::create('127.0.0.1'); var_dump($ip->addr()); $ip->assign('192.168.0.1'); var_dump($ip->addr());
string(9) "127.0.0.1"
string(11) "192.168.0.1"
🔹 v4::binary | v6::binary
待办事项
🔹 v4::decimal | v6::decimal
待办事项
🔹 v4::hexadecimal | v6::hexadecimal
待办事项
🔹 v4::netmask | v6::netmask
待办事项
🔹 v4::prefixLength | v6::prefixLength
待办事项
🔹 v4::first | v6::first
待办事项
🔹 v4::last | v6::last
待办事项
🔹 v4::numAddrs | v6::numAddrs
待办事项
🔹 v4::numHosts | v6::numHosts
待办事项
🔹 v4::hostBits | v6::hostBits
待办事项
🔹 v4::within | v6::within
待办事项
🔹 v4::contains | v6::contains
待办事项
🔹 v4::addr | v6::addr
待办事项
🔹 v4::mask | v6::mask
待办事项
🔹 v4::cidr | v6::cidr
待办事项
🔹 v4::range | v6::range
待办事项
🔹 v4::reverse | v6::reverse
待办事项
🔹 v4::reverseMask | v6::reverseMask
待办事项
🔹 v4::netType | v6::netType
待办事项
🔹 v4::network
待办事项
🔹 v4::broadcast
待办事项
🔹 v4::netClass
待办事项
🔹 v6::full
待办事项
🔹 v6::full4
待办事项
🔹 v6::fullMask
待办事项
🔹 v6::compressed
待办事项
🔹 v6::compressed4
待办事项
数组访问
待办事项
迭代器
地址迭代
待办事项
主机迭代
待办事项
子网迭代
待办事项
异常
静态方法和对象方法可以抛出以下类型的异常
- 在调用带错误参数的方法时抛出
\InvalidArgumentException
; - 尝试使用不适用于地址对象的语言构造,例如通过索引键访问数组时覆盖元素时抛出
\DomainException
; - 当库类无法在当前环境中工作时抛出
\RuntimeException
,例如PHP GMP扩展未安装。
try { $ip = v6::create('invalid addr'); } catch (\InvalidArgumentException $e) { echo $e->getMessage() . PHP_EOL; } try { $ip = v6::create('2002::fdce/64'); echo $ip[12]->addr() . PHP_EOL; $ip[12] = 0; } catch (\DomainException $e) { echo $e->getMessage() . PHP_EOL; }
Wrong arguments
2002::c
Read-only access
Utils 类
方法
🔹 make
描述
public static function make ( $anyFormat [, string $maskString = null ] ) : Address
尝试根据提供的参数创建任何版本的对象
参数
请参阅 create 方法。
返回值
成功时返回一个 Address
对象
示例
use \BIS\IPAddr\Utils as IP; var_dump(IP::make('127.0.0.1')->version()); var_dump(IP::make('::1')->version());
int(4)
int(6)
🔹 info
描述
public static function info ( Address $addr ) : array
参数
addr - v4
或 v6
对象
返回值
返回包含给定地址摘要信息的数组。
示例
use \BIS\IPAddr\Utils as IP; $ip = IP::make('127.0.0.1/8'); echo json_encode(IP::info($ip), JSON_PRETTY_PRINT) . PHP_EOL;
{
"ver": 4,
"host": {
"addr": "127.0.0.1",
"bin": "0b01111111000000000000000000000001",
"dec": 2130706433,
"hex": "0x7f000001",
"raddr": "1.0.0.127.in-addr.arpa.",
"type": "Loopback"
},
"net": {
"cidr": "127.0.0.1\/8",
"range": "127.0.0.0 - 127.255.255.255",
"masklen": 8,
"hostbits": 24,
"mask": "255.0.0.0",
"rmask": "0.0.0.255",
"addrs": 16777216,
"hosts": 16777214,
"network": "127.0.0.0",
"broadcast": "127.255.255.255",
"class": "A"
}
}