此包已被废弃且不再维护。作者建议使用 pulkitjalan/ip-geolocation 包。

支持 Laravel 的 IP 地理位置包装器

8.0.0 2024-08-22 05:21 UTC

README

支持 Laravel 的 IP 地理位置包装器

Latest Stable Version MIT License Run Tests Coverage Total Downloads

支持的驱动程序(服务

要求

  • PHP >= 8.1

安装

通过 composer 安装

composer require pulkitjalan/ip-geolocation

Laravel

提供 Laravel 服务提供者和外观。

将以下内容添加到您的 config/app.php 中的 providers 数组中

PulkitJalan\IPGeolocation\IPGeolocationServiceProvider::class

接下来,将以下内容添加到您的 config/app.php 中的 aliases 数组中

'IPGeolocation' => PulkitJalan\IPGeolocation\Facades\IPGeolocation::class

然后运行 php artisan vendor:publish --provider="PulkitJalan\IPGeolocation\IPGeolocationServiceProvider" --tag="config" 来发布配置文件。

使用较旧的 PHP / Laravel 版本?

如果您使用的是低于 8.1 的 PHP 版本或低于 9.0 的 Laravel 版本,请使用此包的旧版本。

用法

ipGeolocation 类将配置数组作为第一个参数,或者默认使用 ip-api 驱动程序。

示例

<?php

use PulkitJalan\IPGeolocation\IPGeolocation

$ip = new IPGeolocation();

$lat = $ip->getLatitude(); // 51.5141
$lon = $ip->getLongitude(); // -3.1969

IP-API

要使用 ip-api pro 服务,您可以在配置中设置选项。

专业示例

$config = [
    'driver' => 'ip-api',
    'ip-api' => [
        'key' => 'YOUR IP-API KEY',
    ],
];

Maxmind 数据库

要使用 Maxmind 数据库作为驱动程序,您可以在配置中设置选项。

数据库示例

$config = [
    'driver' => 'maxmind_database',
    'maxmind_database' => [
        'database' => '/path/to/database.mmdb',
    ],
];

Maxmind Api

要使用 Maxmind api 作为驱动程序,您可以在配置中设置选项。

Web API 示例

$config = [
    'driver' => 'maxmind_api',
    'maxmind_api' => [
        'user_id' => 'YOUR MAXMIND USER ID',
        'license_key' => 'YOUR MAXMIND LICENSE KEY'
    ],
];

IPStack

要使用 ipstack 作为驱动程序,请设置配置。

示例

$config = [
    'driver' => 'ipstack',
    'ipstack' => [
        'key' => 'YOUR IPSTACK KEY',
        'secure' => true, // (optional) use https
    ],
];

Laravel

在 Laravel 中使用此包,只需更新 config/ip-geolocation.php 中的配置文件即可获得相同的效果。可以使用 IPGEOLOCATION_DRIVER 环境变量设置驱动程序。

可用方法

IPGeolocation 将尝试按照以下顺序使用以下 http 头来确定 IP:HTTP_CLIENT_IPHTTP_X_FORWARDED_FORHTTP_X_FORWARDEDHTTP_FORWARDED_FORHTTP_FORWARDEDREMOTE_ADDR。可选地使用 setIp 方法来设置它。

$ip->setIp('127.0.0.1');

// Laravel
IPGeolocation::setIp('127.0.0.1');

有几种方法可以提取所需的信息。所有方法在数据不可用时都将返回空字符串。

获取纬度

$ip->getLatitude();

// Laravel
IPGeolocation::getLatitude();

获取经度

$ip->getLongitude();

// Laravel
IPGeolocation::getLongitude();

获取城市

$ip->getCity();

// Laravel
IPGeolocation::getCity();

获取国家

$ip->getCountry();

// Laravel
IPGeolocation::getCountry();

获取国家代码

$ip->getCountryCode();

// Laravel
IPGeolocation::getCountryCode();

获取地区

$ip->getRegion();

// Laravel
IPGeolocation::getRegion();

获取地区代码

$ip->getRegionCode();

// Laravel
IPGeolocation::getRegionCode();

获取邮政编码

$ip->getPostalCode();

// Laravel
IPGeolocation::getPostalCode();

获取时区

$ip->getTimezone();

// Laravel
IPGeolocation::getTimezone();

获取 isp(不是所有驱动程序都支持)

$ip->getIsp();

// Laravel
IPGeolocation::getIsp();

获取所有地理信息

$ip->get(); // returns array

// Laravel
IPGeolocation::get(); // returns array

获取原始地理信息

$ip->getRaw(); // different drivers will return different data types

// Laravel
IPGeolocation::getRaw(); // different drivers will return different data types

更新数据库

有一个更新命令可以帮助更新和安装本地的 IP 地理位置数据库。以下命令将下载并安装/更新数据库文件到 /path/to/database.mmdb截至 2019 年 12 月 30 日,Maxmind 要求用户创建账户并使用许可证密钥下载数据库

<?php

use PulkitJalan\IPGeolocation\IPGeolocationUpdater

$config = [
    'driver' => 'maxmind_database',
    'maxmind_database' => [
        'database' => '/path/to/database.mmdb',
        'license_key' => 'YOUR MAXMIND LICENSE KEY'
    ],
];

(new IPGeolocationUpdater($config))->update();

Laravel

一旦您注册了服务提供程序(支持自动发现),您就可以使用命令 php artisan ip-geolocation:update

服务

IP-API

IP-API 是一个免费(或付费)服务,也可以用来替代数据库文件或付费的 Maxmind 服务。免费服务有一些限制,请在查看 文档 之前先了解一下。

Maxmind

您可以使用MaxMind提供的免费数据库(需要许可证密钥)或他们的网络API服务。您可以在这里注册并获取免费许可证代码。