0 フォロワー

クラス yii\helpers\IpHelper

継承yii\helpers\IpHelper » yii\helpers\BaseIpHelper
利用可能なバージョン2.0.14
ソースコード https://github.com/yiisoft/yii2/blob/master/framework/helpers/IpHelper.php

クラス IpHelper は、IP 関連の静的メソッドのセットを提供します。

メソッドは正しい IP アドレスを期待します。IP アドレスを検証するには、IpValidator を使用してください。

パブリックメソッド

継承されたメソッドを隠す

メソッド 説明 定義元
expandIPv6() IPv6 アドレスを完全な表記に展開します。 yii\helpers\BaseIpHelper
getIpVersion() IP バージョンを取得します。IP アドレスの検証は行いません。 yii\helpers\BaseIpHelper
inRange() IP アドレスまたはサブネット $subnet が $subnet に含まれているかどうかを確認します。 yii\helpers\BaseIpHelper
ip2bin() IP アドレスをビット表現に変換します。 yii\helpers\BaseIpHelper

定数

継承された定数を隠す

定数 説明 定義元
IPV4 4 yii\helpers\BaseIpHelper
IPV4_ADDRESS_LENGTH 32 ビット単位での IPv4 アドレスの長さ yii\helpers\BaseIpHelper
IPV6 6 yii\helpers\BaseIpHelper
IPV6_ADDRESS_LENGTH 128 ビット単位での IPv6 アドレスの長さ yii\helpers\BaseIpHelper

メソッド詳細

継承されたメソッドを隠す

expandIPv6() public static method

定義元: yii\helpers\BaseIpHelper::expandIPv6()

IPv6 アドレスを完全な表記に展開します。

例えば、2001:db8::12001:0db8:0000:0000:0000:0000:0000:0001 に展開されます。

public static string expandIPv6 ( $ip )
$ip string

元の有効な IPv6 アドレス

return string

展開された IPv6 アドレス

                public static function expandIPv6($ip)
{
    $hex = unpack('H*hex', inet_pton($ip));
    return substr(preg_replace('/([a-f0-9]{4})/i', '$1:', $hex['hex']), 0, -1);
}

            
getIpVersion() public static method

定義元: yii\helpers\BaseIpHelper::getIpVersion()

IP バージョンを取得します。IP アドレスの検証は行いません。

public static integer getIpVersion ( $ip )
$ip string

有効な IPv4 または IPv6 アドレス。

return integer

IPV4 または IPV6

                public static function getIpVersion($ip)
{
    return strpos($ip, ':') === false ? self::IPV4 : self::IPV6;
}

            
inRange() public static method

定義元: yii\helpers\BaseIpHelper::inRange()

IP アドレスまたはサブネット $subnet が $subnet に含まれているかどうかを確認します。

例えば、次のコードはサブネット 192.168.1.0/24 がサブネット 192.168.0.0/22 に含まれているかどうかを確認します。

IpHelper::inRange('192.168.1.0/24', '192.168.0.0/22'); // true

単一の IP アドレス 192.168.1.21 がサブネット 192.168.1.0/24 に含まれているかどうかを確認する必要がある場合は、次の例のいずれかを使用できます。

IpHelper::inRange('192.168.1.21', '192.168.1.0/24'); // true
IpHelper::inRange('192.168.1.21/32', '192.168.1.0/24'); // true

参照: https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing

public static boolean inRange ( $subnet, $range )
$subnet string

有効な IPv4 または IPv6 アドレスまたは CIDR 範囲(例: 10.0.0.0/8 または 2001:af::/64

$range string

有効な IPv4 または IPv6 CIDR 範囲(例: 10.0.0.0/8 または 2001:af::/64

return boolean

$subnet が $range に含まれているかどうか

throws yii\base\NotSupportedException

                public static function inRange($subnet, $range)
{
    list($ip, $mask) = array_pad(explode('/', $subnet), 2, null);
    list($net, $netMask) = array_pad(explode('/', $range), 2, null);
    $ipVersion = static::getIpVersion($ip);
    $netVersion = static::getIpVersion($net);
    if ($ipVersion !== $netVersion) {
        return false;
    }
    $maxMask = $ipVersion === self::IPV4 ? self::IPV4_ADDRESS_LENGTH : self::IPV6_ADDRESS_LENGTH;
    $mask = isset($mask) ? $mask : $maxMask;
    $netMask = isset($netMask) ? $netMask : $maxMask;
    $binIp = static::ip2bin($ip);
    $binNet = static::ip2bin($net);
    return substr($binIp, 0, $netMask) === substr($binNet, 0, $netMask) && $mask >= $netMask;
}

            
ip2bin() public static method

定義元: yii\helpers\BaseIpHelper::ip2bin()

IP アドレスをビット表現に変換します。

public static string ip2bin ( $ip )
$ip string

有効なIPv4またはIPv6アドレス

return string

ビット列を文字列として

throws yii\base\NotSupportedException

                public static function ip2bin($ip)
{
    $ipBinary = null;
    if (static::getIpVersion($ip) === self::IPV4) {
        $ipBinary = pack('N', ip2long($ip));
    } elseif (@inet_pton('::1') === false) {
        throw new NotSupportedException('IPv6 is not supported by inet_pton()!');
    } else {
        $ipBinary = inet_pton($ip);
    }
    $result = '';
    for ($i = 0, $iMax = strlen($ipBinary); $i < $iMax; $i += 4) {
        $result .= str_pad(decbin(unpack('N', substr($ipBinary, $i, 4))[1]), 32, '0', STR_PAD_LEFT);
    }
    return $result;
}