【问题标题】:Store IPv6 in database将 IPv6 存储在数据库中
【发布时间】:2011-01-04 05:09:41
【问题描述】:

在 MySQL 数据库中使用 PHP 存储 IP 的最佳做法是什么? 有一个名为 ip2long 的函数——但这仅适用于 IPv4。 但是 IPv6 呢?

我知道一个用于 IPv6 IP 的 php 函数, 但它不适用于带有 PHP 的 Windows

【问题讨论】:

标签: php mysql ip ipv6


【解决方案1】:

ip2long 功能手册的第二条评论中,您有一个名为ip2long6 的函数,用于IPv6(下面还有更多)。

【讨论】:

  • 请注意,您需要 gmp-lib 来实现该功能
【解决方案2】:

我想你可以将它作为字符串存储在 CHAR

【讨论】:

    【解决方案3】:

    点分十进制 IPv4 地址可以转换为整数,最大大小为 32 位。 IPv6 地址为 128 位。由于 128 位不适合 PHP int,因此在 PHP 中使用会很痛苦。

    如果您只想连接和使用 IPv6 地址,请省去麻烦,将它们保存为文本。如果要应用网络掩码并计算子网,则需要对其进行转换。

    【讨论】:

    【解决方案4】:

    有一个 php 函数inet_pton,它将一个 ip 地址字符串转换成它的二进制表示(对于 ipv4 和 ipv6)。然后您可以将其作为binary(16) 存储在您的mysql 数据库中。

    要再次获得人类可读的地址,请使用inet_ntop

    【讨论】:

      【解决方案5】:

      knittl 更接近,而不是 binary(16) 在相关问题中使用 varbinary(16) 作为 user196009 answered。这个对我有用。怎么样?

      存储IP:

      <?php
        $query = "insert into stats(vis_ip, id_stat) values('" . inet_pton('66.102.7.104') . "', '1')"; // google's IP address
        // using a PDO wrapper. http://www.phpclasses.org/package/5206-PHP-Execute-database-queries-from-parameters-using-PDO.html
        include_once 'db.php';
        $c = new DB();
        $visit = $c->getResults($query); // stored as binary
      ?>
      

      检索 IP:

      <?php
        $query = "SELECT `vis_ip` FROM `stats` WHERE `id_stat`=1";
        // PDO wrapper
        include_once 'db.php';
        $c = new DB();
        $stats = $c->getRow($query);
        echo inet_ntop($stats->vis_ip); // outputs 66.102.7.104
      ?> 
      

      它应该适用于 IPv6 地址(我有一个 IPv4 连接)。 我不是专家,所以我还不知道 varbinary 长度是否正确,但我怎么说,它对我有用。

      为了检查您的 PHP 版本/主机中是否启用了“IPv6 支持”:

      <?php
        phpinfo(INFO_GENERAL); // http://php.net/manual/es/function.phpinfo.php
      ?> 
      

      【讨论】:

      • 您现在可以使用 MySQL 的 INET6_ATON 将字符串转换为 MySQL >= 5.6 的数字表示,而不是使用 PHP。
      【解决方案6】:

      请注意,MySQL (5.6) 现在支持 IPv6 地址,请参阅 INET6_ATON()

      【讨论】:

        猜你喜欢
        • 2013-07-03
        • 2012-05-22
        • 1970-01-01
        • 2014-12-05
        • 2014-03-28
        • 2011-01-13
        • 1970-01-01
        • 2010-09-30
        • 1970-01-01
        相关资源
        最近更新 更多