Servage Magazine

Information about YOUR hosting company – where we give you a clear picture of what we think and do!

Get the location for your visitor with PHP

Saturday, January 28th, 2012 by Servage

It’s fairly simple to figure out where your visitors come from. There’s a great database available at ipinfodb.com which you can access via PHP scripts for example. This gives your the possibility to find out where visitors are coming from (as long as they are not hiding behind a proxy).

Check out this script (source):

function detect_city($ip) {

  $default = 'Hollywood, CA';

  if (!is_string($ip) || strlen($ip) < 1 || $ip == '127.0.0.1' || $ip == 'localhost')
    $ip = '8.8.8.8';

  $curlopt_useragent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)';

  $url = 'http://ipinfodb.com/ip_locator.php?ip=' . urlencode($ip);
  $ch = curl_init();

  $curl_opt = array(
    CURLOPT_FOLLOWLOCATION  => 1,
    CURLOPT_HEADER      => 0,
    CURLOPT_RETURNTRANSFER  => 1,
    CURLOPT_USERAGENT   => $curlopt_useragent,
    CURLOPT_URL       => $url,
    CURLOPT_TIMEOUT         => 1,
    CURLOPT_REFERER         => 'http://' . $_SERVER['HTTP_HOST'],
  );

  curl_setopt_array($ch, $curl_opt);

  $content = curl_exec($ch);

  if (!is_null($curl_info)) {
    $curl_info = curl_getinfo($ch);
  }

  curl_close($ch);

  if ( preg_match('{<li>City : ([^<]*)</li>}i', $content, $regs) )  {
    $city = $regs[1];
  }
  if ( preg_match('{<li>State/Province : ([^<]*)</li>}i', $content, $regs) )  {
    $state = $regs[1];
  }

  if( $city!='' && $state!='' ){
    $location = $city . ', ' . $state;
    return $location;
  }else{
    return $default;
  }

}
Get the location for your visitor with PHP, 4.0 out of 5 based on 4 ratings
Categories: Tips & Tricks

Keywords:

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

No comments yet (leave a comment)

You are welcome to initiate a conversation about this blog entry.

Leave a comment

You must be logged in to post a comment.