inet_ntop

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

inet_ntop将打包的互联网地址转换为人类可读的表示形式

描述

inet_ntop(string $ip): string|false

此函数将 32 位 IPv4 或 128 位 IPv6 地址(如果 PHP 构建时启用了 IPv6 支持)转换为地址族适当的字符串表示形式。

参数

ip

32 位 IPv4 或 128 位 IPv6 地址。

返回值

返回地址的字符串表示形式,或在失败时返回 false

示例

示例 #1 inet_ntop() 示例

<?php
$packed
= chr(127) . chr(0) . chr(0) . chr(1);
$expanded = inet_ntop($packed);

/* 输出:127.0.0.1 */
echo $expanded;

$packed = str_repeat(chr(0), 15) . chr(1);
$expanded = inet_ntop($packed);

/* 输出:::1 */
echo $expanded;
?>

参见

  • long2ip() - 将长整型地址转换为 (IPv4) 互联网标准点分十进制格式的字符串
  • ip2long() - 将包含 (IPv4) 互联网协议点分十进制地址的字符串转换为长整型
  • inet_pton() - 将人类可读的 IP 地址转换为其打包的 in_addr 表示形式

添加笔记

用户贡献的笔记 4 个笔记

52
ryansun81 at gmail dot com
14 年前
对于想知道此函数名称含义的人
pton:表示(可打印)格式地址到网络地址
ntop:网络地址到表示(可打印)格式地址
5
marcus at synchromedia dot co dot uk
9 年前
PHP 的 inet_ntop 函数与 MySQL 的 INET6_ATON 函数使用的二进制表示形式不兼容,假设您使用的是将 IPv4 和 IPv6 地址都存储在 VARBINARY(16) 字段中的推荐方法。您需要像这样转换它

/**
* 将 MySQL 二进制 v4 (4 字节) 或 v6 (16 字节) IP 地址转换为可打印字符串。
* @param string $ip 包含 IP 地址的二进制字符串,如 MySQL 的 INET6_ATON 函数返回的。
* @return string 如果无效则为空。
*/
function inet6_ntop($ip) {
$l = strlen($ip);
if ($l == 4 or $l == 16) {
return inet_ntop(pack('A' . $l, $ip));
}
return '';
}

您不需要函数以相反的方式进行,因为 MySQL 的 INET6_NTOA 已经与 PHP 的 inet_pton 函数兼容。
-1
MagicalTux at FF dot st
19 年前
对于需要此函数但没有的人,我可以编写一个应该给出几乎相同结果的函数。

<?php
function my_inet_ntop($ip) {
if (
strlen($ip)==4) {
// ipv4
list(,$ip)=unpack('N',$ip);
$ip=long2ip($ip);
} elseif(
strlen($ip)==16) {
// ipv6
$ip=bin2hex($ip);
$ip=substr(chunk_split($ip,4,':'),0,-1);
$ip=explode(':',$ip);
$res='';
foreach(
$ip as $seg) {
while(
$seg{0}=='0') $seg=substr($seg,1);
if (
$seg!='') {
$res.=($res==''?'':':').$seg;
} else {
if (
strpos($res,'::')===false) {
if (
substr($res,-1)==':') continue;
$res.=':';
continue;
}
$res.=($res==''?'':':').'0';
}
}
$ip=$res;
}
return
$ip;
}
?>

我遵循了 IPv6 表示规则
- 16 位块中的“0”序列可以用“0”表示。
- 仅包含“0”的块序列可以省略并用“::”表示(这只能做一次)

(来源:http://www.ipv6style.jp/en/faq/latest.shtml#2003022112 )

示例
<?php
$packed
= str_repeat(chr(0), 15) . chr(1);
$expanded = my_inet_ntop($packed);

/* 输出:::1 */
echo $expanded;
?>

我在 CVS (2005-04-25) 中检查过,没有找到 inet_ntop 函数(我真的需要处理 IPv6),所以我自己实现了它!
-6
PandoraBox2007 at gmail dot com
12 年前
在 inet_pton 之前,工作很棒
//2001:0db8:85a3:0000:0000:8a2e:0370:7334

之后
//2001:db8:85a3::8a2e:370:7334

无需比较压缩数据
string inet_ntop ( string $in_addr [, bool $compress = false] )

---
To Top