Use PHP to Redirect a User based on their Geographic location

  • Thread starter Thread starter paperchaser
  • Start date Start date
P

paperchaser

Guest
I was going crazy today trying to put together a nice cloak/redirect script for a facebook ad. I came across this, enjoy!

This snippet originally is used for targetting ad banners depending on the geographic location of the visitor, but can be used for other purposes. Its originally used for the US and the rest of the world, but you can add checks for other countries too.

PHP:
<?php
  /**
   * Original code from svn://hostip.info/hostip/api/trunk. Optimized & enhanced by Quang Pham @ Saoma, 06.01.07.
   */   
  function isPrivateIP($ip) {
    list($a, $b, $c, $d) = sscanf($ip, "%d.%d.%d.%d");
    return  $a === null || $b === null || $c === null || $d === null ||
            $a == 10    ||
            $a == 239   ||
            $a == 0     ||
            $a == 127   ||
           ($a == 172 && $b >= 16 && $b <= 31) ||
           ($a == 192 && $b == 168);
  }   
   
  function getIP() {
    $default = false;
   
    if (isset($_SERVER)) {
      $default_ip = $_SERVER["REMOTE_ADDR"];     
      $xforwarded_ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
      $client_ip = $_SERVER["HTTP_CLIENT_IP"];   
    } else {
      $default_ip = getenv('REMOTE_ADDR');
      $xforwarded_ip = getenv('HTTP_X_FORWARDED_FOR');
      $client_ip = getenv('HTTP_CLIENT_IP');
    }
   
    if ($xforwarded_ip != "") {
      $result = $xforwarded_ip;
    } else if ($client_ip != "") {
      $result = $client_ip;
    } else {
      $default = true;
    }
   
    if (!$default) { // additional check for private ip numbers
      $default = isPrivateIP($result);
    }
   
    if ($default) {
      $result = $default_ip;
    }
   
    return $result;
  }
 
  function showUSContent() {
    // show US content here, for ex. Yahoo! ads 
  }
 
  function showInternationalContent() {
    // show international content here, for ex. Google ads
  }
 
  function showGeoTargetContent() {
    // make a valid request to the hostip.info API 
    $url = "http://api.hostip.info/country.php?ip=".getIP();
 
    // fetch with curl
    $ch = curl_init();
 
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $country = curl_exec($ch);
 
    curl_close ($ch);
 
    // display according geotarget
    if ($country == "US") {
      showUSContent();
    } else {   
      showInternationalContent();
    }
  } 

  showGeoTargetContent();
?>
 
Back
Top