/** * Returns IpRange * * @param $ip * @return null|GeoIpRange */ protected function findRange($ip) { if (!$this->config['enabled']) { return null; } $long = sprintf("%u", ip2long($ip)); return GeoIpRangeQuery::create()->filterByBegin($long, \Criteria::LESS_EQUAL)->filterByEnd($long, \Criteria::GREATER_EQUAL)->findOne(); }
/** * Updates ranges * * @param $resource * @param $progress */ protected function updateIpRange($resource, $progress) { $current_time = date('Y-m-d H:i:s'); while (($buffer = fgets($resource, 4096)) !== false) { $raw_range = mb_split("\t+", trim($buffer)); if (count($raw_range) != static::FILE_IP_RANGE_COLUMNS) { continue; } /** @var GeoIpRange $range */ $range = GeoIpRangeQuery::create()->filterByBegin($raw_range[static::RANGE_COLUMN_INDEX_BEGIN])->filterByEnd($raw_range[static::RANGE_COLUMN_INDEX_END])->findOneOrCreate(); $city_id = $raw_range[static::RANGE_COLUMN_INDEX_CITY]; if (!preg_match('/^\\d+$/', $city_id)) { $city_id = null; } $range->setGeoCityId($city_id); $range->setCountryCode($raw_range[static::RANGE_COLUMN_INDEX_COUNTRY]); $range->setDescription($raw_range[static::RANGE_COLUMN_INDEX_DESCRIPTION]); $range->setUpdatedAt($current_time); $range->save(); $range->clearAllReferences(true); $progress->advance(mb_strlen($buffer)); $range = null; $rawRange = null; $buffer = null; unset($range); unset($rawRange); unset($buffer); } GeoIpRangeQuery::create()->filterByUpdatedAt($current_time, \Criteria::LESS_THAN)->delete(); }