PHP inet_ntop 函数
最后修改于 2025 年 4 月 4 日
PHP 的 inet_ntop 函数将打包的二进制 IP 地址转换为人类可读的字符串格式。它同时支持 IPv4 和 IPv6。
基本定义
inet_ntop 将二进制 IP 地址转换为标准表示法。它是 inet_pton 的反向操作,后者将字符串转换为二进制。
语法:inet_ntop(string $ip): string|false。成功时返回地址字符串,失败时返回 false。需要 PHP 5.1.0 或更高版本。
转换 IPv4 地址
此示例演示了将打包的 IPv4 地址转换为点分十进制表示法。
ipv4_conversion.php
<?php
declare(strict_types=1);
$packed = inet_pton("192.168.1.1");
$result = inet_ntop($packed);
echo "Packed: " . bin2hex($packed) . "\n";
echo "Unpacked: $result\n";
首先我们使用 inet_pton 将 IP 字符串打包为二进制,然后将其转换回来。bin2hex 显示了二进制表示。
转换 IPv6 地址
此示例展示了将打包的 IPv6 地址转换为其字符串格式。
ipv6_conversion.php
<?php
declare(strict_types=1);
$packed = inet_pton("2001:0db8:85a3:0000:0000:8a2e:0370:7334");
$result = inet_ntop($packed);
echo "Packed: " . bin2hex($packed) . "\n";
echo "Unpacked: $result\n";
与 IPv4 的 32 位相比,IPv6 地址为 128 位。该函数根据输入长度自动处理这两种格式。
错误处理
此示例演示了使用 inet_ntop 时的正确错误处理。
error_handling.php
<?php
declare(strict_types=1);
$invalid = "\x7f\x00\x00\x01\x00"; // Invalid length
$result = inet_ntop($invalid);
if ($result === false) {
echo "Invalid packed IP address\n";
} else {
echo "Converted: $result\n";
}
对于无效输入,该函数返回 false。请务必检查返回值以优雅地处理潜在的转换失败。
使用数据库存储
此示例展示了如何处理以二进制格式存储的 IP 地址。
database_storage.php
<?php
declare(strict_types=1);
// Simulate IP from database (BINARY/VARBINARY column)
$db_ip = hex2bin("c0a80101"); // 192.168.1.1
$human_ip = inet_ntop($db_ip);
echo "Database IP: " . bin2hex($db_ip) . "\n";
echo "Human-readable: $human_ip\n";
数据库通常为了效率而以二进制形式存储 IP 地址。inet_ntop 在检索时将它们转换回可读格式。
网络地址转换
此示例演示了在不同格式之间转换网络地址。
network_conversion.php
<?php
declare(strict_types=1);
$network = hex2bin("ac100000"); // 172.16.0.0/12
$mask = hex2bin("fff00000"); // 255.240.0.0
$network_str = inet_ntop($network);
$mask_str = inet_ntop($mask);
echo "Network: $network_str\n";
echo "Mask: $mask_str\n";
网络地址通常以二进制形式进行操作。这展示了如何将它们转换为可读格式以供显示或记录。
最佳实践
- 验证:在转换前始终验证输入
- 错误处理:检查 false 返回值
- 存储:数据库存储使用二进制格式
- IPv6:使用 IPv4 和 IPv6 地址进行测试
来源
本教程通过 IP 地址在二进制和字符串格式之间转换的实际示例,介绍了 PHP 的 inet_ntop 函数。
作者
列出 所有 PHP 网络函数。