Ip ranges/CIDR

,

Oh and I tested the end result in my hhvm application. By searching an IP and getting back the result.

Works nicely. Now to do the real result and test on my live-test servers. :smiley:

        private function gen_geo_location($click_ip)
	{
		$ip = explode(".", $click_ip);

		list($host) = array_slice($ip, -1); //host
		array_pop($ip);
	        $network = implode(".", $ip); //network

		$as_data = array(
			'bin' => 'cache',
			'table' => 'geo_ip',
			'key' => $network
		);

		$row = $this->aerospike_funcs->get($as_data);

		if ($row)
		{
			$keys = array_keys($row);
			sort($keys);

			foreach($keys as $key => $value)
			{
				if ($host <= $value)
				{
					$g_row = $row[$value];
					break;
				}
			}

			$data = array(
				'ip_from' => $g_row['ip_from'],
				'ip_to' => $g_row['ip_to'],
				'click_isp' => $g_row['isp_name'],
				'country_code' => $g_row['country_code'],
				'country_name' => $g_row['country_name'],
				'region_code' => $g_row['region_code'],
				'region_name' => $g_row['region_name'],
				'city_code' => $g_row['city_code'],
				'city_name' => $g_row['city_name'],
				'isp_name' => $g_row['isp_name'],
				'carrier' => $g_row['mobile_carrier']
			);
		}
		else
		{
			$data = array(
				'ip_from' => 'No IP Address',
				'ip_to' => 'No IP Address',
				'click_isp' => 'No IP Address',
				'country_code' => 'NA',
				'country_name' => 'No IP Address',
				'region_code' => 'NA',
				'region_name' => 'No IP Address',
				'city_code' => 'No IP Address',
				'city_name' => 'No IP Address',
				'isp_name' => 'No IP Address',
				'carrier' => 'No IP Address'
			);
		}

		return $data;
	}