クラス 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 |
メソッド詳細
定義元: yii\helpers\BaseIpHelper::expandIPv6()
IPv6 アドレスを完全な表記に展開します。
例えば、2001:db8::1
は 2001: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);
}
定義元: yii\helpers\BaseIpHelper::getIpVersion()
IP バージョンを取得します。IP アドレスの検証は行いません。
public static integer getIpVersion ( $ip ) | ||
$ip | string |
有効な IPv4 または IPv6 アドレス。 |
return | integer |
---|
public static function getIpVersion($ip)
{
return strpos($ip, ':') === false ? self::IPV4 : self::IPV6;
}
定義元: 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 範囲(例: |
$range | string |
有効な IPv4 または IPv6 CIDR 範囲(例: |
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;
}
定義元: 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;
}
コメントするには、サインアップまたはログインしてください。