vnagara / geoip-module
为zend框架应用程序存储记录的Geoip模块。它利用MaxMind数据库和API
1.1.0
2014-05-31 19:10 UTC
Requires
- php: >=5.3.3
- geoip/geoip: ~1.13
- zendframework/zend-stdlib: ~2.2.0
This package is not auto-updated.
Last update: 2024-09-23 14:59:24 UTC
README
#README
##前言
我的项目需要在检测和存储访问IP数据。
所以我找到了geoip/geoip包。其余的都是存储。
最好的方式是序列化或创建记录在数据库中。第二种方式,使用Doctrine 2,在我的经验中非常慢。
###为什么不使用geoip2/geoip2或MaxMind-DB-Reader-php的.mmdb呢?它已经包含用于序列化的想要的Record类,但:正如实验所示
- Record对象包含了所有国家名称的翻译,这是我使用国际化库做的。
- Record对象太大,所以它的序列化时间太长。
- 它比geoip1与sqlite数据库慢得多。大约2-3倍。(在约2500个IP上进行测试)
所以我决定创建一个替代的Record对象,它将利用快速的geoip sqlite数据库,并适合现在使用的对象。
它可以很容易地扩展到Doctrine实体或文档。
##如何安装
{
"require": {
"vnagara/geoip-module": "1.*"
}
}
下载geoip sql数据库到data/GeoLiteCity.dat或配置文件中设置另一个路径。
在linux上使用wget,你可以使用以下命令(在项目根目录内)
wget -O - http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz | gzip -dc > data/GeoLiteCity.dat
在application.config.php中启用GeoipModule模块。
##新方法
- 在视图助手:在视图助手中有geoipRecord($ipAddress)将返回GeoipRecord。
- 存在一个新的服务geoip。因此,在控制器中,可以通过
/** @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实体模板位于路径:src/GeoipModule/Entity/Record.php