lifo/ip

用于处理IPv4和IPv6地址的IP地址辅助PHP库

v1.1.1 2022-07-12 15:45 UTC

This package is auto-updated.

Last update: 2024-09-05 23:12:48 UTC


README

用于处理IPv4和IPv6地址的IP地址辅助PHP库。可以将任何IP地址转换为十进制、十六进制或二进制,反之亦然。

注意

这个库还不完整,缺少某些CIDR、子网和其他杂项IP功能。大多数IP转换例程使用BCMATH进行计算,这意味着这个库可能不是最快的。一旦库处于更稳定的状态,我可能会开始尝试优化某些部分。

欢迎提交包含缺失功能的pull请求。

示例

翻译例程对IP地址不敏感,这意味着它们不关心你传入的是IPv4还是IPv6地址。所有IP计算都在十进制中进行,这对于存储在数据库中非常合适。

use Lifo\IP\IP;
use Lifo\IP\CIDR:

// IPv4
echo '127.0.0.1 = ', IP::inet_ptod('127.0.0.1'), "\n";
echo IP::inet_dtop('2130706433'), " = 2130706433\n";
echo '127.0.0.1 = ', IP::inet_ptoh('127.0.0.1'), " (hex)\n";

// IPv6
echo '2001:4056::1 = ', IP::inet_ptod('2001:4056::1'), "\n";
echo IP::inet_dtop('42541793049812452694190522094162280449'), " = 42541793049812452694190522094162280449\n";
echo '2001:4056::1 = ', IP::inet_ptoh('2001:4056::1'), " (hex)\n";

// CIDR 

// note: the true CIDR block is calculated from the prefix (the ::1 is ignored)
$ip = new CIDR('2001:4056::1/96');

echo "$ip\n", implode(' - ', $ip->getRange()), " (" . number_format($ip->getTotal()) . " hosts)\n";
// expected output:
127.0.0.1 = 2130706433
127.0.0.1 = 2130706433
127.0.0.1 = 7f000001 (hex)

2001:4056::1 = 42541793049812452694190522094162280449
2001:4056::1 = 42541793049812452694190522094162280449
2001:4056::1 = 20014056000000000000000000000001 (hex)

2001:4056::1/96
2001:4056:: - 2001:4056::ffff:ffff (4,294,967,296 hosts)