vnagara/geoip-module

为zend框架应用程序存储记录的Geoip模块。它利用MaxMind数据库和API

1.1.0 2014-05-31 19:10 UTC

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模块。

##新方法

  1. 在视图助手:在视图助手中有geoipRecord($ipAddress)将返回GeoipRecord。
  2. 存在一个新的服务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