PHP inet_pton 函数
最后修改于 2025 年 4 月 4 日
PHP 的 inet_pton
函数将人类可读的 IP 地址转换为打包的二进制字符串。它对于网络编程和存储至关重要。
基本定义
inet_pton
将 IPv4 和 IPv6 地址从文本转换为二进制。它代表“互联网表示到网络”格式转换。
语法:inet_pton(string $ip): string|false
。成功时返回二进制字符串,输入无效时返回 false。可用于两个 IP 版本。
转换 IPv4 地址
此示例演示了将标准 IPv4 地址转换为二进制。
ipv4_conversion.php
<?php declare(strict_types=1); $ip = "192.168.1.1"; $binary = inet_pton($ip); if ($binary !== false) { echo "Binary representation: " . bin2hex($binary); } else { echo "Invalid IP address"; }
该函数将“192.168.1.1”转换为 4 字节的二进制字符串。我们使用 bin2hex 将二进制以可读的十六进制格式显示。
转换 IPv6 地址
这展示了如何将 IPv6 地址转换为其二进制表示。
ipv6_conversion.php
<?php declare(strict_types=1); $ip = "2001:0db8:85a3:0000:0000:8a2e:0370:7334"; $binary = inet_pton($ip); if ($binary !== false) { echo "Binary representation: " . bin2hex($binary); } else { echo "Invalid IP address"; }
IPv6 地址转换为 16 字节的二进制字符串。该示例显示了一个有效的压缩格式的 IPv6 地址正在被转换。
验证 IP 地址
此示例使用 inet_pton
来验证 IPv4 和 IPv6。
ip_validation.php
<?php declare(strict_types=1); function isValidIP($ip) { return inet_pton($ip) !== false; } $testIPs = ["192.168.1.1", "256.0.0.1", "2001:db8::1", "invalid"]; foreach ($testIPs as $ip) { $valid = isValidIP($ip) ? "valid" : "invalid"; echo "$ip is $valid\n"; }
该函数检查 inet_pton
是否返回非 false。这可以验证两个 IP 版本,而无需单独的检查。
比较 IP 地址
这演示了转换到二进制后比较 IP 地址。
ip_comparison.php
<?php declare(strict_types=1); $ip1 = "192.168.001.001"; $ip2 = "192.168.1.1"; $bin1 = inet_pton($ip1); $bin2 = inet_pton($ip2); if ($bin1 && $bin2) { echo $bin1 === $bin2 ? "Same IP" : "Different IPs"; } else { echo "Invalid IP(s) provided"; }
二进制比较可以处理同一 IP 的不同文本表示。前导零和格式差异不会影响比较。
在数据库中存储 IP
此示例显示了如何以二进制格式高效地存储 IP 地址。
ip_storage.php
<?php declare(strict_types=1); $ip = "203.0.113.45"; $binaryIP = inet_pton($ip); if ($binaryIP !== false) { // Store in database as BINARY(16) for both IPv4 and IPv6 $pdo = new PDO("mysql:host=localhost;dbname=test", "user", "pass"); $stmt = $pdo->prepare("INSERT INTO logs (ip) VALUES (?)"); $stmt->execute([$binaryIP]); echo "IP stored successfully"; }
以二进制格式存储 IP 可以节省空间并允许高效比较。同一列可以存储 IPv4 和 IPv6 地址。
最佳实践
- 验证:始终检查 false 的返回值
- 存储:在数据库中使用二进制列存储 IP
- 比较:比较二进制表示以确保准确性
- 显示:使用 inet_ntop 转换回以进行显示
来源
本教程通过 IP 地址转换、验证和存储的实际示例,介绍了 PHP inet_pton
函数。
作者
列出 所有 PHP 网络函数。