Re: ip-to-country - summary
| From: | Gabor Hojtsy | Date: | Fri, 25 Apr 2003 16:16:39 +0000 |
| Subject: | Re: ip-to-country - summary | ||
| References: | 1 | Groups: | php.mirrors |
| Request: | Send a blank email to php-mirrors+get-17046@lists.php.net to get a copy of this message | ||
> ) We have no issue in using the Directi ip-to-country database. No one
> seems to have any objection with this yet, so I am assuming that we are
> going ahead with this.
OK.
> ) We are going to use the database initially for the following:
> ) To display events from the visitors country on top
This will be handled differently (probably we will make the events in the
user's country bold), due to caching reasons. I'll explain this when we get
there...
> ) To display the visitors country on top in the "mirror sites" page
> ) To display the visitors country on top in the download pages
Yep.
> ) Automatic Redirection is something that we want to do once we have
> discussed solutions to tackle all the possible situations that arise out
> of the same. There are quite a few "situations" :o) - so this may take a
> little time.
Well, whether we want it or not is not to be declared now. It would be a nice
thing, but we cannot see correct methods to achive it. But it is for later,
not our current focus...
> ) The php website is going to download the ip-to-country database from
> the directi website in the format that we all mutually come up with
> using a cron. This format is the exact format that the php website
> needs.
Yep.
> ) Distribution of the db to mirrors and related sites will happen
> through rsync
Yep.
> Our next step now is to start building the format of the db by writing
> test scripts. Let me know if any one need any inputs from my end for
> this.
Well, I was unable to come up with anything better, then my indexable text
file idea. What we need with this format:
- three fields: iprange from and to and three letter countrycode
- have all fields padded to a fixed length (actually only the first two
are related, and they should be padded with zeros added to the
left to let PHP recognized them as numbers, if they need to act in
a comparision)
- no char to separate the fields. This is not needed because of the
fixed width nature of the data
- \n (one byte) linending
This way, one record will be (2*ipnumber_length+3+1) bytes. So we can build up
an index for the IP numbers. This would mean that we need to define a step,
with which we index the IP list. So something like:
$where_to_start_for_ip_search = array(
0 => 0,
10000 => 15,
20000 => 23,
[...]
);
This is a mapping between where (at what record) to start to search for an IP
above that number. Then we can fseek() to that position, as we know the fixed
size of records. From there we can start a normal linear search, that would
probably be sufficient.
Then when we find the right range and country, we set it in a cookie for the
user, so it stays there, and we won't need to find out the country again.
Divyank, I would like to ask you to create an output format like this, so we
can start to write the script on our end to receive the file, process it to
create the index, and deploy it to the mirror sites. Except if anyone has any
objections to the above method, or can suggest a better one ;) Don't be
afraid of suggesting anything revolutionary ;)
Goba