IP アドレスで携帯からのアクセスを判別する関数サンプル

PEAR の Net/IPv4が必要

/**
 * @param array IP/Subnet Set
 * @return boolean
 */
function checkInIP($set) {
	require_once 'Net/IPv4.php'; 
	foreach ($set as $ip=>$subnet) {
		if (Net_IPv4::ipInNetwork($_SERVER['REMOTE_ADDR'], "{$ip}/{$subnet}")) {
			return true;
		}
	}
	return false;
}

/**
 * @return boolean
 */
function checkInDoCoMoIP() {
	$set = array(
		 '210.153.84.0' => '24'
		,'210.136.161.0' => '24'
		,'210.153.86.0' => '24'
		,'124.146.174.0' => '24'
		,'124.146.175.0' => '24'
		//,'202.229.176.0' => '24' (2010年7月上旬に追加予定)
		//,'202.229.177.0' => '24' (2010年7月上旬に追加予定)
		//,'202.229.178.0' => '24' (2010年7月上旬に追加予定)
		);
	return checkInIP($set);
}

/**
 * @return boolean
 */
function checkInAuIP() {
	$set = array(
		'210.230.128.224' => '28',
		'121.111.227.160' => '27',
		'61.117.1.0' => '28',
		'219.108.158.0' => '27',
		'219.125.146.0' => '28',
		'61.117.2.32' => '29',
		'61.117.2.40' => '29',
		'219.108.158.40' => '29',
		'219.125.148.0' => '25',
		'222.5.63.0' => '25',
		'222.5.63.128' => '25',
		'222.5.62.128' => '25',
		'59.135.38.128' => '25',
		'219.108.157.0' => '25',
		'219.125.145.0' => '25',
		'121.111.231.0' => '25',
		'121.111.227.0' => '25',
		'118.152.214.192' => '26',
		'118.159.131.0' => '25',
		'118.159.133.0' => '25',
		'118.159.132.160' => '27',
		'111.86.142.0' => '26',
		'111.86.141.64' => '26',
		'111.86.141.128' => '26',
		'111.86.141.192' => '26',
		'118.159.133.192' => '26'
		);
	return checkInIP($set);
}

/**
 * @return boolean
 */
function checkInSoftbankIP() {
	$set = array(
		 '123.108.237.0' => '27'
		,'202.253.96.224' => '27'
		,'210.146.7.192' => '26'
		,'210.175.1.128' => '25'
		,'123.108.237.224' => '27'
		,'202.253.96.0' => '28'
		);
	return checkInIP($set);
}

 最初は正規表現でなんとかしようと思ったんだが、au のパターンが多すぎて断念。