Home arrow PHP arrow Page 4 - Building Sample Programs for an IP-to-country Mapping Application

Developing an object-oriented geo-location PHP application - PHP

Undeniably, the ability to determine from which countries visitors are accessing a particular web site can be useful, and not only for statistical purposes. With this information at your disposal, it’s possible to instruct the site to deliver its content in different languages, a feature that users worldwide will appreciate. This second part of a four-part series moves you in that direction with some sample programs.

TABLE OF CONTENTS:
  1. Building Sample Programs for an IP-to-country Mapping Application
  2. Review: building an IP-to-country mapping MySQL table with a lookup database file
  3. Mapping IP addresses to originating countries with a basic geo location application
  4. Developing an object-oriented geo-location PHP application
By: Alejandro Gervasio
Rating: starstarstarstarstar / 5
February 10, 2009

print this article
SEARCH DEV SHED

TOOLS YOU CAN USE

advertisement

In the previous segment, I showed you how to build a procedural PHP script which was capable of mapping users' IP addresses to their corresponding countries via the "iptocountry" MySQL table. Thus, in this last section of the article, I'd like to demonstrate how this same task can be performed by way of an object-oriented approach.

To do this, I'm simply going to create a basic MySQL abstraction class, which will carry out the IP-to-country mapping process by means of a simple interface. The signature of this class, along with an example of how to use it, is listed below:


// define 'MySQL' class

class MySQL{

private $mysqli;

private $result;

public function __construct($host='host',$user='user',$password='password',$database='database'){

// connect to MySQL and select database

$this->mysqli=new mysqli($host,$user,$password,$database);

if(mysqli_connect_errno()){

throw new Exception('Error connecting to MySQL: '.$this->mysqli->error);

}

}

// run SQL query

public function query($query){

if(!$this->result=$this->mysqli->query($query)){

throw new Exception('Error running SQL query: '.$this->mysqli->error);

}

}

// fetch one row

public function fetchRow(){

while($row=$this->result->fetch_assoc()){

return $row;

}

return false;

}

}


try{

// connect to MySQL and select database

$db=new MySQL('host','user','password','database');

// get user IP address

$ip=sprintf('%u',ip2long($_SERVER['REMOTE_ADDR']));

// Map IP Address to country using 'iptocountry' database

$db->query("SELECT country FROM iptocountry WHERE lower_bound <=$ip AND upper_bound >= $ip LIMIT 1");

// get row from database table

$row=$db->fetchRow();

// display country which user is accessing from

echo 'Welcome dear visitor, you are accessing our web site from : '.$row['country'];

}

catch(Exception $e){

echo $e->getMessage();

exit();

}


If you develop object-oriented applications with PHP on a frequent basis, then you'll grasp the logic that drives the above script in a snap. In this particular situation, users' IP addresses are directly mapped to their respective countries by performing the same SQL query used with the procedural example. In this case the "iptocountry" table is queried by means of the "MySQL" accessing class shown before.

Finally, as usual with many of my articles on PHP development, feel free to improve all of the code samples included in this article, and use them as a guide for developing different, more creative IP-to-country mapping applications.

Final thoughts

Over the second installment of this series, you hopefully learned how to take advantage of the "iptocountry" MySQL table created in the preceding tutorial to develop a couple of geo-location applications with PHP.

First I used a procedural approach to build the application, and then, in the second example, I showed you how to build it using the object-oriented paradigm. Of course, both programs offer practically the same level of functionality, so feel free to pick the one that best suits your needs.

In the upcoming tutorial, I'll be discussing how to generate dynamic web pages in different languages, naturally by using the previous MySQL lookup table. Therefore, now that you know what the next article will be about, you can't miss it!



 
 
>>> More PHP Articles          >>> More By Alejandro Gervasio
 

blog comments powered by Disqus
   

PHP ARTICLES

- Hackers Compromise PHP Sites to Launch Attac...
- Red Hat, Zend Form OpenShift PaaS Alliance
- PHP IDE News
- BCD, Zend Extend PHP Partnership
- PHP FAQ Highlight
- PHP Creator Didn't Set Out to Create a Langu...
- PHP Trends Revealed in Zend Study
- PHP: Best Methods for Running Scheduled Jobs
- PHP Array Functions: array_change_key_case
- PHP array_combine Function
- PHP array_chunk Function
- PHP Closures as View Helpers: Lazy-Loading F...
- Using PHP Closures as View Helpers
- PHP File and Operating System Program Execut...
- PHP: Effects of Wrapping Code in Class Const...

Developer Shed Affiliates

 



© 2003-2013 by Developer Shed. All rights reserved. DS Cluster - Follow our Sitemap

Dev Shed Tutorial Topics: