vnagara / geoip-module
Geoip module for zend framework application to store Record. It utilize maxmind database and API
Installs: 2 824
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 2
Forks: 1
Open Issues: 1
Requires
- php: >=5.3.3
- geoip/geoip: ~1.13
- zendframework/zend-stdlib: ~2.2.0
This package is not auto-updated.
Last update: 2024-11-04 15:29:36 UTC
README
#README
##PROLOGUE
My project demands on detecting and storing accessed IP data.
So I found geoip/geoip package. And everything else is to store it.
The best way is serialize or create record in DB. The second way with Doctrine 2 is very slow as appeared in my experience.
###Why not geoip2/geoip2 or MaxMind-DB-Reader-php with .mmdb Really? It contains wished class Record for serialization already but: As experiment showed:
- Record Object has all Country name translations what I do with internalization library.
- Record Object is too huge so Its serialization take too long string.
- It much SLOWLY then geoip1 with sqlite db. In 2-3 times. (Tested on about 2500 IPs)
So I decided to create alternate Record object that will utilize fast geoip sqlite db and fit to
now-day Object using. It easily can be extended to Doctrine Entity or Document.
##How to install Install it by composer.
{
"require": {
"vnagara/geoip-module": "1.*"
}
}
Download geoip sql DB to data/GeoLiteCity.dat or set another path in configuration file.
On linux with wget you can use this command (inside project root):
wget -O - http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz | gzip -dc > data/GeoLiteCity.dat
In application.config.php enable GeoipModule module.
##New methods:
- In view helpers: geoipRecord($ipAddress) will return GeoipRecord.
- There is new service geoip. So in controller it is accessible by:
/** @var \GeoipModule\Service\Geoip */
$geoip = $this->getServiceLocator()->get('geoip');
/** @var \GeoipModule\Object\Record */
$recordOfSomeIpAddress = $geoip->find('184.154.227.14');
$city = $recordOfSomeIpAddress->getCity(); // Chicago
// The same:
$recordOfSomeIpAddress = $geoip->lookup('184.154.227.14');
// To use ip from $_SERVER['REMOTE_ADDR']
$record = $geoip->find();
##Doctrine ORM Template of Entity with annotation lays by path: src/GeoipModule/Entity/Record.php