You are here

class Reader in Smart IP 7.2

Same name in this branch
  1. 7.2 includes/vendor/geoip2/geoip2/src/Database/Reader.php \GeoIp2\Database\Reader
  2. 7.2 includes/vendor/maxmind-db/reader/src/MaxMind/Db/Reader.php \MaxMind\Db\Reader
Same name and namespace in other branches
  1. 6.2 includes/vendor/geoip2/geoip2/src/Database/Reader.php \GeoIp2\Database\Reader

Instances of this class provide a reader for the GeoIP2 database format. IP addresses can be looked up using the database specific methods.

## Usage ##

The basic API for this class is the same for every database. First, you create a reader object, specifying a file name. You then call the method corresponding to the specific database, passing it the IP address you want to look up.

If the request succeeds, the method call will return a model class for the method you called. This model in turn contains multiple record classes, each of which represents part of the data returned by the database. If the database does not contain the requested information, the attributes on the record class will have a `null` value.

If the address is not in the database, an {@link \GeoIp2\Exception\AddressNotFoundException} exception will be thrown. If an invalid IP address is passed to one of the methods, a SPL {@link \InvalidArgumentException} will be thrown. If the database is corrupt or invalid, a {@link \MaxMind\Db\Reader\InvalidDatabaseException} will be thrown.

Hierarchy

Expanded class hierarchy of Reader

File

includes/vendor/geoip2/geoip2/src/Database/Reader.php, line 34

Namespace

GeoIp2\Database
View source
class Reader implements ProviderInterface {
  private $dbReader;
  private $locales;

  /**
   * Constructor.
   *
   * @param string $filename The path to the GeoIP2 database file.
   * @param array $locales  List of locale codes to use in name property
   * from most preferred to least preferred.
   * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
   *          is corrupt or invalid
   */
  public function __construct($filename, $locales = array(
    'en',
  )) {
    $this->dbReader = new DbReader($filename);
    $this->locales = $locales;
  }

  /**
   * This method returns a GeoIP2 City model.
   *
   * @param string $ipAddress IPv4 or IPv6 address as a string.
   *
   * @return \GeoIp2\Model\City
   *
   * @throws \GeoIp2\Exception\AddressNotFoundException if the address is
   *         not in the database.
   * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
   *         is corrupt or invalid
   */
  public function city($ipAddress) {
    return $this
      ->modelFor('City', 'City', $ipAddress);
  }

  /**
   * This method returns a GeoIP2 Country model.
   *
   * @param string $ipAddress IPv4 or IPv6 address as a string.
   *
   * @return \GeoIp2\Model\Country
   *
   * @throws \GeoIp2\Exception\AddressNotFoundException if the address is
   *         not in the database.
   * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
   *         is corrupt or invalid
   */
  public function country($ipAddress) {
    return $this
      ->modelFor('Country', 'Country', $ipAddress);
  }

  /**
   * This method returns a GeoIP2 Anonymous IP model.
   *
   * @param string $ipAddress IPv4 or IPv6 address as a string.
   *
   * @return \GeoIp2\Model\AnonymousIp
   *
   * @throws \GeoIp2\Exception\AddressNotFoundException if the address is
   *         not in the database.
   * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
   *         is corrupt or invalid
   */
  public function anonymousIp($ipAddress) {
    return $this
      ->flatModelFor('AnonymousIp', 'GeoIP2-Anonymous-IP', $ipAddress);
  }

  /**
   * This method returns a GeoIP2 Connection Type model.
   *
   * @param string $ipAddress IPv4 or IPv6 address as a string.
   *
   * @return \GeoIp2\Model\ConnectionType
   *
   * @throws \GeoIp2\Exception\AddressNotFoundException if the address is
   *         not in the database.
   * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
   *         is corrupt or invalid
   */
  public function connectionType($ipAddress) {
    return $this
      ->flatModelFor('ConnectionType', 'GeoIP2-Connection-Type', $ipAddress);
  }

  /**
   * This method returns a GeoIP2 Domain model.
   *
   * @param string $ipAddress IPv4 or IPv6 address as a string.
   *
   * @return \GeoIp2\Model\Domain
   *
   * @throws \GeoIp2\Exception\AddressNotFoundException if the address is
   *         not in the database.
   * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
   *         is corrupt or invalid
   */
  public function domain($ipAddress) {
    return $this
      ->flatModelFor('Domain', 'GeoIP2-Domain', $ipAddress);
  }

  /**
   * This method returns a GeoIP2 Enterprise model.
   *
   * @param string $ipAddress IPv4 or IPv6 address as a string.
   *
   * @return \GeoIp2\Model\Enterprise
   *
   * @throws \GeoIp2\Exception\AddressNotFoundException if the address is
   *         not in the database.
   * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
   *         is corrupt or invalid
   */
  public function enterprise($ipAddress) {
    return $this
      ->modelFor('Enterprise', 'Enterprise', $ipAddress);
  }

  /**
   * This method returns a GeoIP2 ISP model.
   *
   * @param string $ipAddress IPv4 or IPv6 address as a string.
   *
   * @return \GeoIp2\Model\Isp
   *
   * @throws \GeoIp2\Exception\AddressNotFoundException if the address is
   *         not in the database.
   * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
   *         is corrupt or invalid
   */
  public function isp($ipAddress) {
    return $this
      ->flatModelFor('Isp', 'GeoIP2-ISP', $ipAddress);
  }
  private function modelFor($class, $type, $ipAddress) {
    $record = $this
      ->getRecord($class, $type, $ipAddress);
    $record['traits']['ip_address'] = $ipAddress;
    $class = "GeoIp2\\Model\\" . $class;
    return new $class($record, $this->locales);
  }
  private function flatModelFor($class, $type, $ipAddress) {
    $record = $this
      ->getRecord($class, $type, $ipAddress);
    $record['ip_address'] = $ipAddress;
    $class = "GeoIp2\\Model\\" . $class;
    return new $class($record);
  }
  private function getRecord($class, $type, $ipAddress) {
    if (strpos($this
      ->metadata()->databaseType, $type) === false) {
      $method = lcfirst($class);
      throw new \BadMethodCallException("The {$method} method cannot be used to open a " . $this
        ->metadata()->databaseType . " database");
    }
    $record = $this->dbReader
      ->get($ipAddress);
    if ($record === null) {
      throw new AddressNotFoundException("The address {$ipAddress} is not in the database.");
    }
    return $record;
  }

  /**
   * @throws \InvalidArgumentException if arguments are passed to the method.
   * @throws \BadMethodCallException if the database has been closed.
   * @return \MaxMind\Db\Reader\Metadata object for the database.
   */
  public function metadata() {
    return $this->dbReader
      ->metadata();
  }

  /**
   * Closes the GeoIP2 database and returns the resources to the system.
   */
  public function close() {
    $this->dbReader
      ->close();
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Reader::$dbReader private property
Reader::$locales private property
Reader::anonymousIp public function This method returns a GeoIP2 Anonymous IP model.
Reader::city public function This method returns a GeoIP2 City model. Overrides ProviderInterface::city
Reader::close public function Closes the GeoIP2 database and returns the resources to the system.
Reader::connectionType public function This method returns a GeoIP2 Connection Type model.
Reader::country public function This method returns a GeoIP2 Country model. Overrides ProviderInterface::country
Reader::domain public function This method returns a GeoIP2 Domain model.
Reader::enterprise public function This method returns a GeoIP2 Enterprise model.
Reader::flatModelFor private function
Reader::getRecord private function
Reader::isp public function This method returns a GeoIP2 ISP model.
Reader::metadata public function
Reader::modelFor private function
Reader::__construct public function Constructor.