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 网络函数。