Geocoder\Provider\Geoip::geocode PHP Méthode

geocode() public méthode

{@inheritDoc}
public geocode ( $address )
    public function geocode($address)
    {
        if (!filter_var($address, FILTER_VALIDATE_IP)) {
            throw new UnsupportedOperation('The Geoip provider does not support street addresses, only IPv4 addresses.');
        }
        // This API does not support IPv6
        if (filter_var($address, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
            throw new UnsupportedOperation('The Geoip provider does not support IPv6 addresses, only IPv4 addresses.');
        }
        if ('127.0.0.1' === $address) {
            return $this->returnResults([$this->getLocalhostDefaults()]);
        }
        $results = @geoip_record_by_name($address);
        if (!is_array($results)) {
            throw new NoResult(sprintf('Could not find "%s" IP address in database.', $address));
        }
        if (!empty($results['region']) && !empty($results['country_code'])) {
            $timezone = @geoip_time_zone_by_country_and_region($results['country_code'], $results['region']) ?: null;
            $region = @geoip_region_name_by_code($results['country_code'], $results['region']) ?: $results['region'];
        } else {
            $timezone = null;
            $region = $results['region'];
        }
        return $this->returnResults([$this->fixEncoding(array_merge($this->getDefaults(), ['latitude' => $results['latitude'], 'longitude' => $results['longitude'], 'locality' => $results['city'], 'postalCode' => $results['postal_code'], 'adminLevels' => $results['region'] ? [['name' => $region, 'code' => $results['region'], 'level' => 1]] : [], 'country' => $results['country_name'], 'countryCode' => $results['country_code'], 'timezone' => $timezone]))]);
    }

Usage Example

Exemple #1
0
 /**
  * @expectedException \Geocoder\Exception\UnsupportedOperation
  * @expectedExceptionMessage The Geoip provider does not support IPv6 addresses, only IPv4 addresses.
  */
 public function testGeocodeWithRealIPv6()
 {
     $provider = new Geoip();
     $provider->geocode('::ffff:74.200.247.59');
 }