$_SERVER["REMOTE_ADDR"]
实际上,我想将PHP 返回的数据存储到DB字段中。问题是我找不到有关IPv6地址文本表示形式的最大长度的任何适当信息,而网络服务器正是通过IPv6地址提供的$_SERVER["REMOTE_ADDR"]
。
我对将文本表示形式转换为地址通常会编码的128位不感兴趣,我只想知道存储由返回的任何IPv6地址最多需要多少个字符$_SERVER["REMOTE_ADDR"]
。
$_SERVER["REMOTE_ADDR"]
实际上,我想将PHP 返回的数据存储到DB字段中。问题是我找不到有关IPv6地址文本表示形式的最大长度的任何适当信息,而网络服务器正是通过IPv6地址提供的$_SERVER["REMOTE_ADDR"]
。
我对将文本表示形式转换为地址通常会编码的128位不感兴趣,我只想知道存储由返回的任何IPv6地址最多需要多少个字符$_SERVER["REMOTE_ADDR"]
。
Answers:
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
(包括<arpa/inet.h>
,请参见man inet_ntop
)。在我的系统上(标头“ in.h”):
#define INET6_ADDRSTRLEN 46
最后一个字符是终止NULL(如我所相信的),因此最大长度为45,其他答案也是如此。
回答了我自己的问题:
IPv6地址通常写为八组,每组四个十六进制数字,其中每个组用冒号(:)分隔。
最多39个字符。
我认为此链接中的@Deepak答案更接近正确答案。客户端IP地址的最大长度。因此,正确的大小是45而不是39。有时我们会尝试缩小字段的大小,但是如果准备足够的存储大小似乎会更好。