Change website content based on location PHP

Suppose you are providing a service for a specific city. You want to show your website only for that city. So you can easily create this by using http://www.geoplugin.net and PHP

First, we need to get the visitor’s IP address by using the below function.

Target a specific city by php
<?php
function get_user_ip() {
    if (!empty($_SERVER['HTTP_CLIENT_IP'])){
        return $_SERVER['HTTP_CLIENT_IP'];
    }

    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
        return $_SERVER['HTTP_X_FORWARDED_FOR'];
    }

    return $_SERVER['REMOTE_ADDR'];
}

Then we need to call a geolocation service, in this case, we are using http://www.geoplugin.net

$geo_data = var_export(unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip='.get_user_ip())));

The http://www.geoplugin.net return serializes data, so we need to unserialize() it first and by using var_export() we get the structured information from the text.

We can get the response like below

array ( 
	'geoplugin_request' => '156.239.105.112', 
	'geoplugin_status' => 200, 
	'geoplugin_delay' => '1ms', 
	'geoplugin_credit' => 'Some of the returned data includes GeoLite data created by MaxMind, available from http://www.maxmind.com.', 
	'geoplugin_city' => 'Kolkata', 
	'geoplugin_region' => 'West Bengal', 
	'geoplugin_regionCode' => 'WB', 
	'geoplugin_regionName' => 'West Bengal', 
	'geoplugin_areaCode' => '', 
	'geoplugin_dmaCode' => '', 
	'geoplugin_countryCode' => 'IN', 
	'geoplugin_countryName' => 'India', 
	'geoplugin_inEU' => 0, 
	'geoplugin_euVATrate' => false, 
	'geoplugin_continentCode' => 'AS', 
	'geoplugin_continentName' => 'Asia', 
	'geoplugin_latitude' => '22.5697', 
	'geoplugin_longitude' => '88.3697', 
	'geoplugin_locationAccuracyRadius' => '20', 
	'geoplugin_timezone' => 'Asia/Kolkata', 
	'geoplugin_currencyCode' => 'INR', 
	'geoplugin_currencySymbol' => '₹', 
	'geoplugin_currencySymbol_UTF8' => '₹', 
	'geoplugin_currencyConverter' => '71.7795', 
)

Now based on that city, just redirect the user to a specific page.

if($geo_data["geoplugin_city"] == 'Kolkata'){
	header("location:index.php");
}else{
	header("location:error_landing.php");
}

By the above code, you can target multiple cities also. Here index.php supply actual content to the target city. But if a user accesses this website from a different city then it will be redirected to “error_landing.php” page.

So the complete would be something like:

<?php
function get_user_ip() {
    if (!empty($_SERVER['HTTP_CLIENT_IP'])){
        return $_SERVER['HTTP_CLIENT_IP'];
    }

    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
        return $_SERVER['HTTP_X_FORWARDED_FOR'];
    }

    return $_SERVER['REMOTE_ADDR'];
}


$geo_data = var_export(unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip='.get_user_ip())));

if($geo_data["geoplugin_city"] == 'Kolkata'){
	header("location:index.php");
}else{
	header("location:error_landing.php");
}

About Ashis Biswas

A web developer who has a love for creativity and enjoys experimenting with the various techniques in both web designing and web development. If you would like to be kept up to date with his post, you can follow him.

Leave a Comment