ZetCode

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";

网络地址通常以二进制形式进行操作。这展示了如何将它们转换为可读格式以供显示或记录。

最佳实践

来源

PHP inet_ntop 文档

本教程通过 IP 地址在二进制和字符串格式之间转换的实际示例,介绍了 PHP 的 inet_ntop 函数。

作者

我叫 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 PHP 网络函数