簡體   English   中英

TYPO3 - Doctrine / BINARY(16) 編碼 IPv6 地址的 DBAL 數據字段類型

[英]TYPO3 - Doctrine / DBAL data field type for BINARY(16) encoded IPv6 addresses

我正在為 TYPO3 插件實現 ORM model,該插件是現有外部數據庫的連接器。 我自己完成了大部分事情,但我不知道如何從給定的字節中解析 IPv6 地址:

namespace Homeinfo\hwdb\Domain\Model;

use DateTime;

final class System
{
    function __construct(
        public readonly int $id,
        public readonly ?int $group,
        public readonly ?int $deployment,
        public readonly ?int $dataset,
        public readonly ?int $openvpn,
        public readonly WHAT_TYPE_HERE $ipv6address,
        public readonly ?string $pubkey,
        public readonly DateTime $created,
        public readonly ?DateTime $configured,
        public readonly bool $fitted,
        public readonly string $operating_system,
        public readonly ?bool $monitor,
        public readonly ?string $serial_number,
        public readonly ?string $model,
        public readonly ?DateTime $last_sync,
        public readonly bool $updating,
    )
    {
    }

    public static function fromArray(array $array): Self
    {
        return new self(
            $array['id'],
            $array['group'],
            $array['deployment'],
            $array['dataset'],
            $array['openvpn'],
            HOW_TO_PARSE_THIS($array['ipv6address']),
            $array['pubkey'],
            new DateTime($array['created']),
            (($configured = $array['configured']) === null) ? null : new DateTime($configured),
            $array['fitted'],
            $array['operating_system'],
            $array['monitor'],
            $array['serial_number'],
            $array['model'],
            (($last_sync = $array['last_sync']) === null) ? null : new DateTime($last_sync),
            $array['updating'],
        );
    }
}

我需要知道在 TYPO3 中可以使用什么類型來表示 IPv6 地址(我知道我在 Python 3 中用ipaddress.IPv6Address來做)而且我也不知道如何從從 MySQL 檢索到的二進制數據中正確解析它IPv6 地址存儲為BINARY(16)的數據庫。

由於 PHP 沒有“二進制”數據類型,您需要將數據轉換為某種字符串表示形式。 通過在 mysql 中使用 hex(clumn) 在 select 中投射列來簡化它。

這會給你一個 hexstring。 (也許 doctrine 已經自動完成了)如果你想向人類顯示地址。 您可以使用 .net_ntop() 直接轉換十六進制字符串

如果您需要兩種表示形式,您可以將十六進制存儲在 model 中,然后在適當的 getters / setters 中進行轉換,例如getHumanReadableIpAdress()

https://www.php.net/manual/en/function..net-ntop.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM