[PHP]IPアドレスがIPv4、IPv6であるかを判定する

php_program_top

この記事には広告を含む場合があります。

記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

文字列がipアドレスの有効範囲であるかを判定する

phpにて所定の文字列が、ipアドレス(ipv4/ipv6)の有効範囲であるかを判定したいときがあります。短縮もあるipv6の良い判定方法が見当たらなかったため紹介します。

 

サンプルプログラム

filter_var関数を利用して作成したipv4のチェックプログラムとipv6のチェックプログラムにそれぞれ文字列を判定します。

<?
/**
 * ipv4の有効な値かどうかを判定する
 * @param $ip 判定するipアドレス
 * @return 判定結果
 */
function isIPv4($ip) {
    if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
        return true;
    }
    return false;
}

/**
 * ipv6の有効な値かどうかを判定する
 * @param $ip 判定するipアドレス
 * @return 判定結果
 */
function isIPv6($ip) {
    if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
        return true;
    }
    return false;
}


$ipList = array(
    'test',
    '127.0.0.1',
    '127.0.0.1/32',
    '0000:0000:0000:0000:0000:ffff:7f00:0001',
    '::1'
);

echo 'ipv4 check' . PHP_EOL;
foreach($ipList as $ip) {
    if(isIPv4($ip)) {
        echo $ip . ' : true' . PHP_EOL;
    } else {
        echo $ip . ' : false' . PHP_EOL;
    }
}

echo PHP_EOL;

echo 'ipv6 check' . PHP_EOL;
foreach($ipList as $ip) {
    if(isIPv6($ip)) {
        echo $ip . ' : true' . PHP_EOL;
    } else {
        echo $ip . ' : false' . PHP_EOL;
    }
}

 

サンプルの出力結果

ipv6の短縮形も有効であると判定できています。

[root@hostname]$ php ipcheck.php 
ipv4 check
test : false
127.0.0.1 : true
127.0.0.1/32 : false
0000:0000:0000:0000:0000:ffff:7f00:0001 : false
::1 : false

ipv6 check
test : false
127.0.0.1 : false
127.0.0.1/32 : false
0000:0000:0000:0000:0000:ffff:7f00:0001 : true
::1 : true

 

 

ウェブプログラミングについては下記の本も参考になるので、スキルアップにお役立てください。

created by Rinker
徳丸 浩(著)
ページ数: 688ページ
出版社:SBクリエイティブ
発売日:2018/06/21

出典:amazon