さまざまなサービス (オンラインおよびローカル) を使用して、訪問者の IP アドレスから訪問者の位置を取得します。
composer require
を使用してインストール場所を指定します。
composer require stevebauman/location
設定ファイルを公開します (これにより、 config
ディレクトリ内にlocation.php
ファイルが作成されます)。
php artisan vendor:publish --provider= " StevebaumanLocationLocationServiceProvider "
use Stevebauman Location Facades Location ;
if ( $ position = Location:: get ()) {
// Successfully retrieved position.
echo $ position -> countryName ;
} else {
// Failed retrieving position.
}
重要:
- このメソッドは
request()->ip()
を介してユーザーの IP アドレスを取得します。- デフォルト構成では、
testing.enabled
がアクティブになり、返される IP アドレスは米国になります。クライアントの実際の IP アドレスを取得するには、これを無効にします。
$ position = Location:: get ( ' 192.168.1.1 ' );
IP アドレスの位置を偽装するには、IP アドレス パターンの配列とその予想される位置を指定してLocation::fake
を呼び出します。
use Stevebauman Location Position ;
use Stevebauman Location Facades Location ;
Location:: fake ([
' 127.0.0.1 ' => Position:: make ([
' countryName ' => ' United States ' ,
' countryCode ' => ' US ' ,
// ...
])
]);
// Somewhere in your application...
$ position = Location:: get ( ' 127.0.0.1 ' ); // Position
必要に応じて、アスタリスクを使用して、指定された IP アドレスに対して同じ位置を返すこともできます。
Location:: fake ([
' * ' => Position:: make ([
' countryName ' => ' United States ' ,
' countryCode ' => ' US ' ,
// ...
])
]);
$ position = Location:: get ( $ anyIpAddress ); // Position
期待値が指定されていないか、期待値が一致しない場合、 Location::get
はfalse
を返します。
Location:: fake ();
Location:: get ( $ anyIpAddress ); // false
アプリケーションが複数の IP アドレスの場所を取得しようとする場合は、複数の IP アドレスの期待パターンを指定できます。
Location:: fake ([
' 127.0.0.1 ' => Position:: make ([
' countryName ' => ' United States ' ,
' countryCode ' => ' US ' ,
// ...
]),
' 192.168.1.1 ' => Position:: make ([
' countryName ' => ' Canada ' ,
' countryCode ' => ' CA ' ,
// ...
]),
]);
利用可能なドライバー:
外部 Web サービスからのレート制限に達した場合に一部の位置情報が返されるように、ローカル データベースを使用して MaxMind をフォールバック ドライバーとして設定することをお勧めします。
自分のサーバーからユーザーの位置情報を取得するように MaxMind を設定するには、次のことを行う必要があります。
MAXMIND_LICENSE_KEY
キーを使用して.env
ファイルに保存します。php artisan location:update
を実行して、最新の.mmdb
ファイルをdatabase/maxmind
ディレクトリにダウンロードします。注: 訪問者から最新の情報を取得するには、定期的に
location:update
実行してこのファイルを更新する必要があることに注意してください。
構成ファイルでは、必要な数のフォールバック ドライバーを指定できます。訪問者から常に一般的な位置情報を取得できるように、ローカル データベースの.mmdb
ファイル (前述) を使用して MaxMind ドライバーを構成することをお勧めします。
ドライバーを取得しようとして例外が発生した場合 (プロバイダー API が変更された場合の 400/500 エラーなど)、ライン内の次のドライバーが自動的に使用されます。
独自のドライバーを作成するには、アプリケーション内にクラスを作成し、抽象ドライバーを拡張するだけです。
namespace App Location Drivers ;
use Illuminate Support Fluent ;
use Illuminate Support Facades Http ;
use Stevebauman Location Position ;
use Stevebauman Location Request ;
use Stevebauman Location Drivers Driver ;
class MyDriver extends Driver
{
protected function process ( Request $ request ): Fluent
{
$ response = Http:: get ( " https://driver-url.com " , [ ' ip ' => $ request -> getIp ()]);
return new Fluent ( $ response -> json ());
}
protected function hydrate ( Position $ position , Fluent $ location ): Position
{
$ position -> countryCode = $ location -> country_code ;
return $ position ;
}
}
次に、ドライバー クラス名を構成ファイルに挿入します。
// config/location.php
' driver ' => App Location Drivers MyDriver::class,
バージョン 7 では、コードベースが更新され、厳密な PHP タイプ、更新された PHP および Laravel バージョン要件、更新されたDriver
構造、および小さな構成の追加が行われました。
バージョン 7 では、ロケーション ドライバーは、 location:update
コマンドを使用して更新できるUpdatable
インターフェイスを実装できるようになりました。現在、これをサポートしているのは MaxMind ドライバーのみです。
最新の MaxMind データベース ファイルを自動的にダウンロードできるように構成ファイルを更新するには、 config/location.php
ファイルに以下のurl
構成オプションを挿入します。
// config/location.php
return [
'maxmind' => [
// ...
'local' => [
// ...
+ 'url' => sprintf('https://download.maxmind.com/app/geoip_download_by_token?edition_id=GeoLite2-City&license_key=%s&suffix=tar.gz', env('MAXMIND_LICENSE_KEY')),
],
],
];
完了したら、以下のArtisanコマンドを実行して、最新の.mmdb
ファイルをダウンロードできます。
php artisan location:update
バージョン 7 では、厳密な PHP タイプ、更新された PHP および Laravel バージョン要件、および更新されたDriver
構造によってコードベースが更新されました。
独自のカスタム ドライバー実装を作成した場合は、基本Driver
またはHttpDriver
クラスを使用するように更新する必要があります。
HTTP サービスを使用して場所を取得している場合は、 HttpDriver
拡張して、記述する必要があるコードを減らすと便利な場合があります。
namespace AppLocationDrivers;
use IlluminateSupportFluent;
use StevebaumanLocationPosition;
- use StevebaumanLocationDriversDriver;
+ use StevebaumanLocationDriversHttpDriver;
- class MyDriver extends Driver
+ class MyDriver extends HttpDriver
{
- public function url($ip)
+ public function url(string $ip): string;
{
return "http://driver-url.com?ip=$ip";
}
- protected function process($ip)
- {
- return rescue(function () use ($ip) {
- $response = json_decode(file_get_contents($this->url($ip)), true);
-
- return new Fluent($response);
- }, $rescue = false);
- }
- protected function hydrate(Position $position, Fluent $location)
+ protected function hydrate(Position $position, Fluent $location): Position;
{
$position->countryCode = $location->country_code;
return $position;
}
}
場所は、可能な限りセマンティック バージョニング ガイドラインに基づいてバージョン管理されます。
リリースには次の形式で番号が付けられます。
<major>.<minor>.<patch>
そして、次のガイドラインに従って構築されました。
マイナー バージョンは個別に管理されないため、次のマイナー バージョンにアップグレードすることをお勧めします。
メジャー バージョンは、別個のブランチを通じて個別に維持されます。