location

Detect a users location by their IP Address.

Github星跟踪图

Location

Travis CI
Scrutinizer Code Quality
Latest Stable Version
Total Downloads
License

Retrieve a users location from their IP address using external web services, or through a flat-file database hosted on your server.

Requirements

  • Laravel 5.* or 6.*
  • PHP 7.0 or greater
  • cURL extension enabled

Installation

Run the following command in the root of your project:

composer require stevebauman/location

Note: If you're using Laravel 5.5 or above, you can skip the registration
of the service provider, as it is registered automatically.

Add the service provider in config/app.php:

Stevebauman\Location\LocationServiceProvider::class,

Publish the config file:

php artisan vendor:publish --provider="Stevebauman\Location\LocationServiceProvider"

Usage

Retrieving a users location

Note: This method retrieves the users IP address via request()->ip():

$position = Location::get();

// Returns instance of Stevebauman\Location\Position

Retrieving a location with a specific IP address

$position = Location::get('192.168.1.1');

Drivers

Available Drivers

Available drivers at the moment are:

Setting Up MaxMind

To setup MaxMind to retrieve the users location from your own server, download the database file here:

http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz

  1. Extract the downloaded file (you may need to use an application such as 7zip if on Windows)
  2. Create a maxmind folder inside your database directory (database/maxmind)
  3. Place the GeoLite2-City.mmdb file into the maxmind directory

You should end up with a folder path of: my-laravel-app/database/maxmind/GeoLite2-City.mmdb.

Then, set your default driver to Stevebauman\Location\Drivers\MaxMind::class, and you're all set!

Note: Keep in mind, you'll need to update this file continuously to retrieve the most current information.

Fallback drivers

In the config file, you can specify as many fallback drivers as you wish. It's recommended to install
the MaxMind database .mmdb file so your always retrieving some generic location information from the user.

If an exception occurs trying to grab a driver (such as a 404 error if the
providers API changes), it will automatically use the next driver in line.

Creating your own drivers

To create your own driver, simply create a class in your application, and extend the abstract Driver:

namespace App\Location\Drivers;

use Illuminate\Support\Fluent;
use Stevebauman\Location\Position;
use Stevebauman\Location\Drivers\Driver;

class MyDriver extends Driver
{
    public function url($ip)
    {
        return "http://driver-url.com?ip=$ip";
    }

    protected function hydrate(Position $position, Fluent $location)
    {
        $position->countryCode = $location->country_code;

        return $position;
    }

    protected function process($ip)
    {
        try {
            $response = json_decode(file_get_contents($this->url($ip)), true);

            return new Fluent($response);
        } catch (\Exception $e) {
            return false;
        }
    }
}

Then, insert your driver class name into the configuration file:

/*, --------------------------------------------------------------------------, Driver, --------------------------------------------------------------------------, The default driver you would like to use for location retrieval., */

'driver' => App\Locations\MyDriver::class,

Versioning

Location is versioned under the Semantic Versioning guidelines as much as possible.

Releases will be numbered with the following format:

<major>.<minor>.<patch>

And constructed with the following guidelines:

  • Breaking backward compatibility bumps the major and resets the minor and patch.
  • New additions without breaking backward compatibility bumps the minor and resets the patch.
  • Bug fixes and misc changes bumps the patch.

Minor versions are not maintained individually, and you're encouraged to upgrade through to the next minor version.

Major versions are maintained individually through separate branches.

主要指标

概览
名称与所有者stevebauman/location
主编程语言PHP
编程语言PHP (语言数: 1)
平台
许可证MIT License
所有者活动
创建于2014-05-04 23:10:58
推送于2025-02-20 16:04:12
最后一次提交2025-02-19 04:59:26
发布数63
最新版本名称v7.5.0 (发布于 )
第一版名称v0.5 (发布于 )
用户参与
星数1.2k
关注者数27
派生数188
提交数596
已启用问题?
问题数111
打开的问题数6
拉请求数276
打开的拉请求数1
关闭的拉请求数10
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?