geocoder-php/maxmind-provider
MaxMind provider for PHP-Geocoder. Integrates MaxMind GeoIP databases to resolve IP addresses into location data (country, region, city, coordinates). Useful for adding fast, offline IP geolocation to your PHP apps.
Installation
composer require geocoder-php/maxmind-provider
Ensure you have the base geocoder-php/geocoder package installed as a dependency.
First Use Case: Basic Geocoding
use Geocoder\Geocoder;
use Geocoder\Provider\MaxMind\MaxMindProvider;
$geocoder = new Geocoder();
$geocoder->registerProvider(new MaxMindProvider('/path/to/GeoLite2-City.mmdb'));
$result = $geocoder->geocode('1600 Amphitheatre Parkway, Mountain View, CA');
foreach ($result as $hit) {
echo $hit->getCoordinates()->getLatitude() . ', ' . $hit->getCoordinates()->getLongitude() . "\n";
}
Where to Look First
src/Provider/MaxMind/MaxMindProvider.php for core logic.tests/ for usage examples and edge cases.Reverse Geocoding
$coordinates = new \Geocoder\Model\Coordinates(-33.8688, 151.2093);
$result = $geocoder->reverse($coordinates);
Batch Processing
$ips = ['192.168.1.1', '8.8.8.8'];
foreach ($ips as $ip) {
$result = $geocoder->geocode($ip); // Works with IP addresses
}
Integration with Laravel
// In a service provider or config file
$geocoder = new Geocoder();
$geocoder->registerProvider(new MaxMindProvider(config('services.maxmind.path')));
app()->singleton('geocoder', function () use ($geocoder) {
return $geocoder;
});
Caching Results
use Geocoder\Cache\DoctrineCache;
$cache = new DoctrineCache();
$geocoder->registerCache($cache);
.env or config files.
MAXMIND_DB_PATH=/path/to/GeoLite2-City.mmdb
try {
$result = $geocoder->geocode('invalid address');
} catch (\Geocoder\Exception\UnsupportedProviderException $e) {
// Fallback logic
}
Database File Paths
config('services.maxmind.path') or env('MAXMIND_DB_PATH').IP vs. Address Geocoding
Geocoder\Provider\GoogleMapsProvider or Geocoder\Provider\OpenStreetMapProvider for address geocoding if MaxMind is insufficient.Database Updates
// In a console command
public function handle() {
$this->updateMaxMindDatabase();
}
private function updateMaxMindDatabase() {
// Logic to download/update the DB file
}
Memory Usage
Validate Database Files
use MaxMind\Db\Reader;
try {
$reader = new Reader('/path/to/database.mmdb');
} catch (\Exception $e) {
// Database is corrupted or invalid
}
Log Missing Data
$result = $geocoder->geocode('123 Unknown St');
if (empty($result)) {
\Log::warning('Geocoding failed for: 123 Unknown St', ['provider' => 'maxmind']);
}
Check Provider Registration
if (!$geocoder->providers()->has('maxmind')) {
throw new \RuntimeException('MaxMind provider not registered!');
}
Custom Metadata Extraction Override the default metadata handling:
$hit = $geocoder->geocode('8.8.8.8')->first();
$metadata = $hit->getExtraProperties(); // Access raw MaxMind data
Fallback Providers Combine MaxMind with other providers for redundancy:
$geocoder->registerProvider(new MaxMindProvider($path));
$geocoder->registerProvider(new OpenStreetMapProvider());
Laravel Service Provider Extend functionality in a Laravel service provider:
public function register() {
$this->app->singleton('geocoder', function ($app) {
$geocoder = new Geocoder();
$geocoder->registerProvider(new MaxMindProvider($app['config']['services.maxmind.path']));
return $geocoder;
});
}
How can I help you explore Laravel packages today?