この記事には広告を含む場合があります。
記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
文字列が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
ウェブプログラミングについては下記の本も参考になるので、スキルアップにお役立てください。


