Untitled UI logotext
Solutions
WebsitesEcommerceMobile AppsWeb AppsProduction Support & Maintenance
Our work
Company
About usBlogPodcastContact us
Book a free consultation

How Do I Get a Visitor's Location Information using PHP?

Olivia Rhye

Sometimes we have content that is specific to a certain country and we only want to show, or hide, it for visitors from that country. Or maybe we want to change some of the language used on a page to cater to different cultures to improve our targeted marketing strategies. We can do this easily with the PHP function below. Once we get the information we need, using a few conditionals will allow you to show, hide or change content depending on where your visitor is from!

<?php
function ip_info($ip = NULL, $purpose = "location", $deep_detect = TRUE) {
   $output = NULL;
   if (filter_var($ip, FILTER_VALIDATE_IP) === FALSE) {
       $ip = $_SERVER["REMOTE_ADDR"];
       if ($deep_detect) {
           if (filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP))
               $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
           if (filter_var(@$_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP))
               $ip = $_SERVER['HTTP_CLIENT_IP'];
       }
   }
   $purpose    = str_replace(array("name", "\n", "\t", " ", "-", "_"), NULL, strtolower(trim($purpose)));
   $support    = array("country", "countrycode", "state", "region", "city", "location", "address");
   $continents = array(
       "AF" => "Africa",
       "AN" => "Antarctica",
       "AS" => "Asia",
       "EU" => "Europe",
       "OC" => "Australia (Oceania)",
       "NA" => "North America",
       "SA" => "South America"
   );
   if (filter_var($ip, FILTER_VALIDATE_IP) && in_array($purpose, $support)) {
       $ipdat = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=" . $ip));
       if (@strlen(trim($ipdat->geoplugin_countryCode)) == 2) {
           switch ($purpose) {
               case "location":
                   $output = array(
                       "city"           => @$ipdat->geoplugin_city,
                       "state"          => @$ipdat->geoplugin_regionName,
                       "country"        => @$ipdat->geoplugin_countryName,
                       "country_code"   => @$ipdat->geoplugin_countryCode,
                       "continent"      => @$continents[strtoupper($ipdat->geoplugin_continentCode)],
                       "continent_code" => @$ipdat->geoplugin_continentCode
                   );
                   break;
               case "address":
                   $address = array($ipdat->geoplugin_countryName);
                   if (@strlen($ipdat->geoplugin_regionName) >= 1)
                       $address[] = $ipdat->geoplugin_regionName;
                   if (@strlen($ipdat->geoplugin_city) >= 1)
                       $address[] = $ipdat->geoplugin_city;
                   $output = implode(", ", array_reverse($address));
                   break;
               case "city":
                   $output = @$ipdat->geoplugin_city;
                   break;
               case "state":
                   $output = @$ipdat->geoplugin_regionName;
                   break;
               case "region":
                   $output = @$ipdat->geoplugin_regionName;
                   break;
               case "country":
                   $output = @$ipdat->geoplugin_countryName;
                   break;
               case "countrycode":
                   $output = @$ipdat->geoplugin_countryCode;
                   break;
           }
       }
   }
   return $output;
}

?>


// Example 1: Get visitor IP address details
<?php

echo $country = ip_info("Visitor", "Country"); // India
echo $countryCode = ip_info("Visitor", "Country Code"); // IN
echo $state = ip_info("Visitor", "State"); // Andhra Pradesh
echo $city = ip_info("Visitor", "City"); // Proddatur
echo $address = ip_info("Visitor", "Address"); // Proddatur, Andhra Pradesh, India

print_r(ip_info("Visitor", "Location")); // Array ( [city] => Proddatur [state] => Andhra Pradesh [country] => India [country_code] => IN [continent] => Asia [continent_code] => AS )

?>


// Example 2: Get details of any IP address. [Support IPV4 & IPV6]
<?php

echo $country = ip_info("173.252.110.27", "Country"); // United States
echo $countryCode = ip_info("173.252.110.27", "Country Code"); // US
echo $state = ip_info("173.252.110.27", "State"); // California
echo $city = ip_info("173.252.110.27", "City"); // Menlo Park
echo $address = ip_info("173.252.110.27", "Address"); // Menlo Park, California, United States

print_r(ip_info("173.252.110.27", "Location")); // Array ( [city] => Menlo Park [state] => California [country] => United States [country_code] => US [continent] => North America [continent_code] => NA )

?>

Original Post

Ready to start a project?

Book a free consultation
Untitled UI logotext
Our work
About us
Blog
Careers
Submit a ticket
Agency Partnerships
Contact
© 2024 fjorge. All rights reserved.
Privacy