IP/マスク範囲を含むファイルを読み取ろうとしていますが、指定された IP がファイル内の任意の範囲と一致する場合、TRUE または同様の関数が返されます。ここに私が持っているコードがあります
function myip2long($ip) {
if (is_numeric($ip)) {
return sprintf("%u", floatval($ip));
} else {
return sprintf("%u", floatval(ip2long($ip)));
}
}
function ipfilter($ip) {
$match = 0;
$ip_addr = decbin(myip2long($ip));
if (file_get_contents('./countryip/all-zones/us.zone')) {
$source = file('./countryip/all-zones/us.zone');
foreach ($source as $line) {
$network = explode("/", $line);
$net_addr = decbin(myip2long($network[0]));
$cidr = $network[1];
if (substr($net_addr, 0, $cidr) == substr($ip_addr, 0, $cidr)) {
$match = 1;
break;
}
}
}
return $match;
}
$user_ip = $_SERVER['REMOTE_ADDR'];
if (ipfilter($user_ip) == 1) echo "<br />allowed! Your IP is a United States IP!";
else echo "deny!";
サンプル ファイル (上記の例のようなもの) は、 http://www.ipdeny.com/ipblocks/data/countries/us.zoneから入手できます。
上記のコードが正しいかどうかわからないので、ここから取得しました' http://www.php.net/manual/en/function.ip2long.php#86793