我想将$_SERVER["REMOTE_ADDR"]
PHP中返回的数据存储到数据库字段中,这非常简单.问题是我无法找到有关IPv6地址的文本表示的最大长度的任何适当信息,这是网络服务器提供的$_SERVER["REMOTE_ADDR"]
.
我对将文本表示转换为地址通常编码的128位不感兴趣,我只想知道存储返回的任何IPv6地址需要多少个字符$_SERVER["REMOTE_ADDR"]
.
45个字符.
你可能期望一个地址
0000:0000:0000:0000:0000:0000:0000:0000
8*4 + 7 = 39
8组4位数,其中7位:
.
但是如果你有一个IPv4映射的IPv6地址,那么最后两个组可以写在基数10中.
,例如,由.[::ffff:192.168.100.228]
.完全写出来:
0000:0000:0000:0000:0000:ffff:192.168.100.228
(6*4 + 5)+ 1 +(4*3 + 3)= 29 + 1 + 15 = 45
注意,这是一个输入/显示约定 - 它仍然是一个128位地址,对于存储,它可能最好标准化原始冒号分隔格式,即[0000:0000:0000:0000:0000:ffff:c0a8:64e4]
上面的地址.
在Linux上,请参阅constant INET6_ADDRSTRLEN
(include
,see man inet_ntop
).在我的系统上(标题"in.h"):
#define INET6_ADDRSTRLEN 46
最后一个字符用于终止NULL,正如我所说,所以最大长度为45,与其他答案一样.
回答了我自己的问题:
IPv6地址通常写为八组,每组四个十六进制数字,每组用冒号(:)分隔.
所以最多39个字符.
我认为@Deepak在这个链接中的答案更接近正确答案.客户端IP地址的最大长度.所以正确的大小是45而不是39.有时我们试图在字段大小中搜索,但是如果我们准备足够的存储大小似乎更好.