ipv4 IP v4 地址库查询

  1. Requirements
  2. Usage
  3. Resources

整理 IPIP.netQQ IP 数据库纯真版 为符合中华人民共和国行政区划代码的国家与地区、省或直辖市、地级市或省管县级市地址。

在 IPIP.net 库的基础上去掉 IDC/ISP 数据补上纯真 IP 库的数据,然后生成下列四个库:

  • 
    
  • 
    
  • 
    
  • 
    

Requirements

通过 composer 安装

composer require larryli/ipv4

Usage

别名

可以在 `config` 文件先定义一个别名:

Yii::setAlias('@ipv4', (dirname(__DIR__) . '/vendor/larryli/ipv4');
组件

`components` 中增加:

// ipv4 component
'ipv4' => [
    'class' => 'larryli\ipv4\yii2\IPv4',
    'runtime' => '@runtime',
    'database' => 'larryli\ipv4\yii2\Database',
    // query config
    'providers' => [
        'monipdb',    // empty
        'qqwry',
        'full' => ['monipdb', 'qqwry'], // ex. 'monipdb', 'qqwry', ['qqwry', 'monipdb']
        'mini' => 'full',   // ex. ['monipdb', 'qqwry'], 'monipdb', 'qqwry', ['qqwry', 'monipdb']
        'china' => 'full',
        'world' => 'full',
        'freeipip',
    ],
],

其中:

  • 
    
  • 
    
  • 
    
  • 
    
  • 
    
命令

`config数组中增加controllerMap` 配置内容:

// ipv4 command
'ipv4' => [
    'class' => 'larryli\ipv4\yii2\commands\Ipv4Controller',
],

使用:

./yii help ipv4

可以查看 ipv4 命令列表。

数据库迁移

复制数据库迁移脚本到当前 `@app/migrations` 下:

cp vendor/larryli/ipv4/src/yii2/migrations/*.php migrations/

或者参见此页面的说明使用其他的方式处理。

然后,执行迁移:

./yii migrate/up
初始化
./yii ipv4/init
使用组件调用
use Yii;
Yii::$app->get('ipv4')->get('full')->find(ip2long('127.0.0.1'));
使用模型调用

仅支持生成的数据库 `larryli\ipv4\query\DatabaseQuery` 查询。

使用 yii2 模型可以不需要配置 ipv4 组件,但必须先使用 ipv4 组件生成好相关数据库。

也就是说,可以只在 console 应用中配置 ipv4 组件;然后在 web 应用中配置 ipv4 组件直接使用相关模型。

Division 模型
namespace app\models;

use larryli\ipv4\yii2\models\Division as BaseDivision;

/**
 * Class Division
 * @package app\models
 */
class Division extends BaseDivision
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return "{{%ipv4_divisions}}";
    }
}

使用 `tableName静态方法可以重载掉父类中调用组件查询prefix` 的代码。

Full/Mini/China/World 模型
namespace app\models;

use larryli\ipv4\yii2\models\Index;

/**
 * Class Full
 * @package app\models
 *
 * @property string $ip
 * @property Division $division
 */
abstract class Full extends Index
{
    /**
     * @return string
     */
    static public function divisionClassName()
    {
        return Division::className();
    }
    
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return '{{%ipv4_full}}';
    }
}

使用 `divisionClassName静态方法可以重载掉Division父类中调用组件查询prefix` 的代码。

仅需要声明所需使用的查询模型即可。

查询:

$model = Full::findOneByIp(ip2long('127.0.0.1'));
if (!empty($model) && !empty(!$model->division)) {
    echo $model->division->name;
}

Resources

0 0
1 follower
0 downloads
Yii Version: 2.0
License: MIT
Category: Others
Developed by: Larry Li
Created on: Sep 14, 2015
Last updated: 8 years ago

Related Extensions