PHPackages                             larryli/ipv4-yii2 - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. larryli/ipv4-yii2

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

larryli/ipv4-yii2
=================

IP v4 中国城市地址库 Yii2 组件

1.1.1(10y ago)34.9k1MITPHPPHP &gt;=5.4

Since Sep 16Pushed 10y ago1 watchersCompare

[ Source](https://github.com/larryli/ipv4-yii2)[ Packagist](https://packagist.org/packages/larryli/ipv4-yii2)[ Docs](https://github.com/larryli/ipv4-yii2)[ RSS](/packages/larryli-ipv4-yii2/feed)WikiDiscussions master Synced 3w ago

READMEChangelogDependencies (4)Versions (10)Used By (1)

IPv4 Yii2 组件
============

[](#ipv4-yii2-组件)

通过 composer 安装
--------------

[](#通过-composer-安装)

```
composer require larryli/ipv4-yii2
```

配置 ipv4 组件和命令
-------------

[](#配置-ipv4-组件和命令)

### 别名

[](#别名)

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

```
Yii::setAlias('@ipv4-yii2', dirname(__DIR__) . '/vendor/larryli/ipv4-yii2');
```

### 组件

[](#组件)

在 `components` 中增加：

```
// ipv4 component
'ipv4' => [
    'class' => '\larryli\ipv4\yii2\IPv4',
    // 'db' => 'db',
    // 'database' => '\larryli\ipv4\yii2\Database',
    // 'prefix' => 'ipv4_',
    'providers' => [
        'monipdb' => [
            // 'class' => '\larryli\ipv4\MonipdbQuery',
            'filename' => '@runtime/17monipdb.dat',
        ],
        'qqwry' => [
            // 'class' => '\larryli\ipv4\QqwryQuery',
            'filename' => '@runtime/qqwry.dat',
        ],
        'full' => [
            // 'class' => '\larryli\ipv4\FullQuery',
            'providers' => ['monipdb', 'qqwry'], // ex. 'monipdb', 'qqwry', ['qqwry', 'monipdb']
        ],
        'mini' => [
            // 'class' => '\larryli\ipv4\MiniQuery',
            'providers' => 'full',   // ex. ['monipdb', 'qqwry'], 'monipdb', 'qqwry', ['qqwry', 'monipdb']
        ],
        'china' => [
            // 'class' => '\larryli\ipv4\MiniQuery',
            'providers' => 'full',
        ],
        'world' => [
            // 'class' => '\larryli\ipv4\MiniQuery',
            'providers' => 'full',
        ],
        'freeipip' => [
            // 'class' => '\larryli\ipv4\FreeipipQuery',
        ],
        // 'taobao' => [
            // 'class' => '\larryli\ipv4\TaobaoQuery',
        // ],
        // 'sina' => [
            // 'class' => '\larryli\ipv4\SinaQuery',
        // ],
        // 'BaiduMap' => [
            // 'class' => '\larryli\ipv4\BaidumapQuery',
        // ],
    ],
],
```

其中：

- `class` 指向组件自身；
- `db` 可用的 yii2 数据库连接，默认为 `Yii::$app->db`；
- `database` 指向特定的 `Database` 类，默认使用 `\larryli\ipv4\yii2\Database`；
- `prefix` 为数据库表前缀，默认为 `ipv4_`；
- `providers` 配置可用的 `\larryli\ipv4\Query` 数据源；
    - `class` 数据源可以指定具体的类；
    - `filename` ，对于 `\larryli\ipv4\FileQuery` 需指定文件路径，其内容可以用别名，如 `@runtime/foo.dat`；
    - `providers` 数据源的数据源，`\larryli\ipv4\DatabaseQuery` 需要，可以为一个或多个；其中第一个为主数据源，其他是备选，按照定义顺序依次选用；

### 命令

[](#命令)

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

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

使用：

```
./yii help ipv4
```

可以查看 ipv4 命令列表。

数据库迁移
-----

[](#数据库迁移)

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

```
cp vendor/larryli/ipv4-yii2/migrations/*.php migrations/
```

或者参见[此页面的说明](https://github.com/yiisoft/yii2/issues/384)使用其他的方式处理。

然后，执行迁移：

```
./yii migrate/up
```

初始化
---

[](#初始化)

```
./yii ipv4/init
```

查询
--

[](#查询)

```
./yii ipv4/query 127.0.0.1
```

杂项
--

[](#杂项)

```
./yii ipv4/benchmark        # 性能测试
./yii ipv4/clean            # 清除全部数据
./yii ipv4/clean file       # 清除下载的文件数据
./yii ipv4/clean database   # 清除生成的数据库数据
./yii ipv4/dump             # 导出原始数据
./yii ipv4/dump division    # 导出排序好的全部地址列表
./yii ipv4/dump division_id # 导出排序好的全部地址和猜测行政区域代码列表
```

注意：`dump` 命令会耗费大量内存，请配置 PHP `memory_limit` 至少为 `256M` 或更多。

代码调用
----

[](#代码调用)

### 使用组件

[](#使用组件)

```
use Yii;
Yii::$app->get('ipv4')->getQuery('full')->find(ip2long('127.0.0.1'));
Yii::$app->get('ipv4')->__get('full')->find(ip2long('127.0.0.1'));
Yii::$app->ipv4->full->find(ip2long('127.0.0.1'));

foreach (Yii::$app->ipv4->getQueries() as $query) {
    $query->find(ip2long('127.0.0.1'));
}
```

### 使用模型

[](#使用模型)

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

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

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

#### Division 模型

[](#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 模型

[](#fullminichinaworld-模型)

```
namespace app\models;

use larryli\ipv4\yii2\models\Index;

/**
 * Class Full
 * @package app\models
 *
 * @property string $ip
 * @property Division $division
 */
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;
}
```

相关包
---

[](#相关包)

- 核心 [larryli/ipv4](https://github.com/larryli/ipv4)
- 控制台命令 [larryli/ipv4-console](https://github.com/larryli/ipv4-console)
- Medoo 数据库支持 [larryli/ipv4-medoo](https://github.com/larryli/ipv4-medoo)
- Yii2 示例 [larryli/ipv4-yii2-sample](https://github.com/larryli/ipv4-yii2-sample)

###  Health Score

32

—

LowBetter than 69% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity20

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity64

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~32 days

Total

9

Last Release

3678d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/96ad7a2df570547276deb3f07f6e604f897c3dcbe495d55c811b9ae7e3b484ae?d=identicon)[larryli](/maintainers/larryli)

---

Top Contributors

[![larryli](https://avatars.githubusercontent.com/u/10723?v=4)](https://github.com/larryli "larryli (21 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/larryli-ipv4-yii2/health.svg)

```
[![Health](https://phpackages.com/badges/larryli-ipv4-yii2/health.svg)](https://phpackages.com/packages/larryli-ipv4-yii2)
```

###  Alternatives

[craftcms/cms

Craft CMS

3.6k3.6M2.9k](/packages/craftcms-cms)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
