function checkipinchina($ip) {
static $iplist = NULL;
if($iplist == NULL)$iplist = file_get_contents('chinaip');
list($a, $b, $c, $d) = explode('.', $ip);
$check = ($a << 24) + ($b << 16) + ($c << 8) + $d;
preg_match_all("~\n$a\.\d+\.\d+\.\d+\/\d+~", $iplist, $ip2);
foreach((array)$ip2[0] as $cidr) {
$cidr = trim($cidr);
list($base, $bits) = explode('/', $cidr);
list($a, $b, $c, $d) = explode('.', $base);
$i = ($a << 24) + ($b << 16) + ($c << 8) + $d;
$mask = $bits == 0 ? 0 : (~0 << (32 - $bits));
$low = $i & $mask;
$high = $i | (~$mask & 0xFFFFFFFF);
if ($check >= $low && $check <= $high) return true;
}
return false;
}
$ip = '1.60.161.0';
var_dump(checkipinchina($ip));
其中的chinaip文件内容来自http://www.countryipblocks.net/country-blocks/select-formats/,格式为CIDR