you can use this function to determine the continent of a country:
function getContinentFromCountry($country)
{
$data = array ("AF"=> "AS","AX"=>"EU","AL"=>"EU", "DZ"=>"AF","AS"=>"OC", "AD"=>"EU","AO"=> "AF" ........);
return $data[$country];
}
unfortunately this comment's size is restricted, so you will have the rest by yourself
for example:
getContinentFromCountry("DE") will result in "EU"
this data is based on
wikipedia's
List_of_countries_by_continent_(data_file)
GeoIP Functions
Εισαγωγή
The GeoIP extension allows you to find the location of an IP address. City, State, Country, Longitude, Latitude, and other information as all, such as ISP and connection type can be obtained with the help of GeoIP.
Απαιτήσεις
This extension requires the GeoIP C library version 1.4.0 or higher to be installed. You can grab the latest version from » http://www.maxmind.com/app/c and compile it yourself.
By default, you will only have access to the Free GeoIP Country or GeoLite City databases. While this module can work with other types of database, you must buy a commercial license from » Maxmind.
Εγκατάσταση
This » PECL extension is not bundled with PHP.
Information for installing this PECL extension may be found in the manual chapter titled Installation of PECL extensions. Additional information such as new releases, downloads, source files, maintainer information, and a CHANGELOG, can be located here: » http://pecl.php.net/package/geoip.
Τύποι Πόρων
Αυτή η επέκταση δεν έχει resource τύπους ορισμένους.
Προκαθορισμένες Σταθερές
Οι σταθερές παρακάτω ορίζονται από αυτή την επέκταση, και θα είναι διαθέσιμες μόνο αν η επέκταση έχει γίνει compile μέσα στην PHP ή έχει φορτωθεί δυναμικά κατά την εκτέλεση.
- GEOIP_COUNTRY_EDITION (integer)
- GEOIP_REGION_EDITION_REV0 (integer)
- GEOIP_CITY_EDITION_REV0 (integer)
- GEOIP_ORG_EDITION (integer)
- GEOIP_ISP_EDITION (integer)
- GEOIP_CITY_EDITION_REV1 (integer)
- GEOIP_REGION_EDITION_REV1 (integer)
- GEOIP_PROXY_EDITION (integer)
- GEOIP_ASNUM_EDITION (integer)
- GEOIP_NETSPEED_EDITION (integer)
- GEOIP_DOMAIN_EDITION (integer)
The following constants are for net speed:
Table of Contents
- geoip_country_code_by_name — Get the two letter country code
- geoip_country_code3_by_name — Get the three letter country code
- geoip_country_name_by_name — Get the full country name
- geoip_database_info — Get GeoIP Database information
- geoip_db_avail — Determine if GeoIP Database is available
- geoip_db_filename — Returns the filename of the corresponding GeoIP Database
- geoip_db_get_all_info — Returns detailed informations about all GeoIP database types
- geoip_id_by_name — Get the Internet connection speed
- geoip_isp_by_name — Get the Internet Service Provider (ISP) name
- geoip_org_by_name — Get the organization name
- geoip_record_by_name — Returns the detailed City information found in the GeoIP Database
- geoip_region_by_name — Get the country code and region
GeoIP
07-Apr-2008 05:04
01-Mar-2008 07:26
For Debian etch users : libgeoip is in version 1.4 so get the source from lenny (apt-get build-dep libgeoip;apt-get source libgeoip), compile it on etch (dpkg-buildpackage -rfakeroot in source folder) and install resulting libgeoip1 and libgeo-dev packages (dpkg -i)... Together with php5-dev this package is easy to install (phpize5;./configure --enable-geoip;make;make install)... Then check your install in php with :
<?php
echo geoip_database_info(GEOIP_COUNTRY_EDITION);
echo $_SERVER['REMOTE_ADDR'];
echo geoip_country_code3_by_name($_SERVER['REMOTE_ADDR']);
?>
please note free .dat is in /usr/share/GeoIP/GeoIP.dat
Use geoip-bin package to schedule automatic updates (configure /etc/geoip.default.conf and copy to /etc/geoip.conf, then add a crontab to make the updates...)
hope this helps
10-Jun-2007 08:57
Just to clarify the other comments, the maxmind post seems to be out of date / incorrect.
This module fails to work (ie: resolve cities) with the GeoLite City database from here:
http://www.maxmind.com/app/geolitecity
The error occurs when calling the function geoip_record_by_name(), which states incorrectly that the required database is not available. I have tested it with the very latest database, for which geoip_database_info() returns the version:
GEO-533LITE 20070601 Build 1 Copyright (c) 2007 MaxMind LLC All Rights Reserved
It does, however, resolve countries OK via the GeoLite Country database, which you can grab here: http://www.maxmind.com/app/geoip_country
I tested with the version:
GEO-106FREE 20070601 Build 1 Copyright (c) 2007 MaxMind LLC All Rights Reserved
26-Feb-2007 08:09
The geoip_country_*_by_name functions only work with GeoIP Country. The geoip_record_by_name function works with GeoIP City. geoip_region_by_name works with GeoIP Region. So the API should work with all of the GeoIP databases, as long as you call the correct function.
I couldn't get it to work with the DMA code database (product ID 137). It seems to only work with the country database. The documentation should contain a warning that this code (as of 0.2.0) is incomplete and that Net_GeoIP should be used for non-country databases.
16-Nov-2006 07:59
If you want to use this extension in SUSE/openSUSE, it is available here:
http://repos.opensuse.org/server:/php:/extensions/
13-Sep-2006 05:45
Both, Ubuntu and Debian itself make usage of version 1.3.x of the c libraries, so installation can't be done with the debian packages, because configure stops with:
== configure: error: You need version 1.4.0 or higher of the C API ==
so you must download it from maxmind.
08-Sep-2006 01:34
If you are a Debian or Ubuntu user, instead of building it from source, you can:
aptitude install libgeoip-dev libgeoip1
