How do I use PHP to work with geolocation data?

Using PHP to Work with Geolocation Data

Geolocation data is an important aspect of modern web applications. It allows you to provide location-based services, like displaying nearby restaurants or providing directions. In this blog post, we’ll explore how to use PHP to work with geolocation data, specifically using the GeoIP2 library to identify a user’s location based on their IP address.

1. Setting up the GeoIP2 library:

The GeoIP2 library is an excellent resource for working with geolocation data in PHP. It provides an easy-to-use interface for the MaxMind GeoIP2 database, which includes information about IP addresses and their associated locations. To get started, you’ll need to install the library using Composer:

composer require geoip2/geoip2:^2.0

Next, download the GeoLite2 database from MaxMind ( For this example, we’ll use the GeoLite2-City database, which provides city-level information for IP addresses.

Once you’ve downloaded the database, extract the .mmdb file and place it in your project directory.

2. Obtaining the user’s IP address:

To obtain the user’s IP address, we can use the $_SERVER superglobal variable. Keep in mind that this method may not be reliable for users behind proxies or VPNs.

function getUserIP() {
    $ip_address = '';
    if (isset($_SERVER['HTTP_CLIENT_IP'])) {
        $ip_address = $_SERVER['HTTP_CLIENT_IP'];
    } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
        $ip_address = $_SERVER['REMOTE_ADDR'];
    return $ip_address;

$user_ip = getUserIP();

3. Retrieving geolocation data:

Now that we have the user’s IP address, we can use the GeoIP2 library to retrieve the geolocation data. Make sure to replace ‘path/to/GeoLite2-City.mmdb’ with the actual path to your .mmdb file.

require_once 'vendor/autoload.php';
use GeoIp2\Database\Reader;

$geoipReader = new Reader('path/to/GeoLite2-City.mmdb');
$record = $geoipReader->city($user_ip);

4. Displaying the geolocation data:

The $record object now contains the geolocation data for the given IP address. You can access various properties of the object to display the desired information:

$city = $record->city->name;
$country = $record->country->name;
$iso_code = $record->country->isoCode;
$latitude = $record->location->latitude;
$longitude = $record->location->longitude;

echo "City: $city<br>";
echo "Country: $country<br>";
echo "ISO Code: $iso_code<br>";
echo "Latitude: $latitude<br>";
echo "Longitude: $longitude<br>";


In this blog post, we learned how to use PHP to work with geolocation data. By leveraging the GeoIP2 library and the MaxMind GeoLite2 database, we were able to obtain a user’s location based on their IP address. This information can be used to provide location-based services, enhance the user experience, and more.

Got question?

Submit it here

© All rights reserved.