PHP的inet_pton()转换IPv4和IPv6 - php

当我将inet_pton()用作FE80:0000:0000:0000:0202:B3FF:FE1E:8329时,无论得到什么,我都会得到������)

因此,我添加了bin2hex()并使此fe800000000000000202b3fffe1e8329更好。

但是,我期望的是16而不是32的字符串。

从那里变得更加不一致。

转换8.8.8.8时,我得到的08080808字符串为8。

有什么方法可以在所有长度都相同的情况下实现某种一致性,还是应该按原样将其添加到数据库中?

我正在寻找一种有效/快速的方法来完成此任务,以使它的字符串更小,占用的数据库空间更少,而不会浪费太多资源。

参考方案

IPv6地址的长度为128位; IPv4地址的长度为32位。

这绝非偶然:创建IPv6的主要动机之一是没有足够的32位地址来满足现代Internet的需求。

������)不管是什么。

这就是128位或16字节的二进制数据。尝试将其视为文本不会给您带来任何有趣的效果,因为并非所有的位组合都是可显示的字符。

所以我添加了bin2hex()并得到了这个fe800000000000000202b3fffe1e8329

将二进制字符串转换为十六进制意味着将每个4位集合表示为来自集合0123456789abcdef的字符。结果是一个易于理解的字符串,但长度为32个字符(128/4 = 32)。

您可能会注意到,编写IPv6地址的标准方法就是在此字符串上加上一个:每4个字符以提高可读性。

转换8.8.8.8时得到08080808

以二进制形式,IPv4地址的长度为32位或4个字节。但同样,这些字符也不都是可打印字符。作为十六进制,它是一个长度为8个字符的字符串,因为它包含多少组4位(32/4 = 8)。

有没有办法在所有长度都相同的情况下实现某种一致性

使IPv4地址和IPv6地址具有相同长度的唯一方法是在IPv4地址的左侧添加一些内容。这就像在说:“我能使约翰的名字占用与萨曼莎相同的空间吗”。

我正在寻找一种高效/快速的方法来完成此任务,从而导致字符串更小,从而减少数据库占用的空间

最简短的通用表示形式是首先从inet_pton获得的二进制形式。只需确保将其存储在数据库的二进制列中即可,而不是VarChar / Text / etc。

另外,IPv6的标准文本格式有一个简写形式,其中地址中的一个0序列可以用::替换,因此FE80:0000:0000:0000:0202:B3FF:FE1E:8329可以缩写为FE80::0202:B3FF:FE1E:8329。我不知道使用PHP这样的缩写,但是编写一个缩写并不难。

如果您需要它易于阅读但又简短,则可以使用其他人类可读的二进制编码,例如Base64(natively supported by PHP)。 base64中的一个字符代表6位,但是通常将字符串填充为8位和6位长的倍数,因此IPv6地址将占用24个可打印字符(128位+ 16位填充/ 6 = 24)。

其他更罕见的编码也是可能的,例如“ Base85”,它使用更大范围的字符来使输出更短。但是,从数学上讲,它们都比二进制表示要长,因此您始终至少需要16个字节。

PHP-将日期插入日期时间字段 - php

我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数

php ziparchive类源代码 - php

Improve this question 我如何获取ziparchive类本身的源代码。 参考方案 假设您在谈论PHP ZipArchive class:下载PHP source code并查找适当的文件。如果您希望源代码是PHP代码,您可能会感到失望,因为源代码是用C语言编写的。或者,也可以在PHP Github Development Reposito…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

PHP-如何建议搜索字词,“你是说……?” - php

当使用不检索任何结果的术语搜索数据库时,我想允许“您是不是……”建议(例如Google)。例如,如果有人寻找“ jquyer””,它将输出“ did you mean jquery?”当然,建议结果必须与数据库内部的值匹配(我正在使用mysql)。您知道可以做到这一点的图书馆吗?我已经用谷歌搜索过,但是没有找到任何好的结果。或者,也许您有一个想法,该如何独自…

php:将分钟取整到最近的四分之一小时,然后执行更多操作 - php

最初的问题是这样的:取分钟数->转换为四分之一小时-> 1个四分之一小时为1个单位->输出单位我今天整天都在整理页面,几分钟前我的大脑就停止工作了,我只是不知道如何输出单位数量。我知道在此网站上发布问题会有所帮助。因此,用户输入的分钟数(不是小时和分钟,而是数分钟),站点需要输出单位数量。单位是一个刻钟。分钟总是四舍五入到最近的四分之一小时…