استرجع موقع الزائر من عنوان IP الخاص به باستخدام خدمات متنوعة (عبر الإنترنت ومحلية).
composer require
:
composer require stevebauman/location
انشر ملف التكوين (سيؤدي هذا إلى إنشاء ملف location.php
داخل دليل config
):
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.
}
مهم :
- تسترد هذه الطريقة عنوان IP الخاص بالمستخدم عبر
request()->ip()
.- في التكوين الافتراضي، يكون
testing.enabled
نشطًا، ويكون عنوان IP الذي تم إرجاعه موجودًا في الولايات المتحدة الأمريكية. قم بتعطيله للحصول على عنوان IP الحقيقي للعميل.
$ position = Location:: get ( ' 192.168.1.1 ' );
يمكنك استدعاء Location::fake
باستخدام مجموعة من أنماط عناوين IP ومواضعها المتوقعة لتزييف موقع عنوان IP:
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 ' ,
// ...
]),
]);
برامج التشغيل المتاحة:
يُنصح بإعداد MaxMind كمحرك احتياطي باستخدام قاعدة بيانات محلية بحيث يتم إرجاع بعض معلومات الموقع في حالة الوصول إلى حد المعدل من خدمات الويب الخارجية.
لإعداد MaxMind لاسترداد موقع المستخدم من الخادم الخاص بك، يجب عليك:
.env
الخاص بك باستخدام مفتاح MAXMIND_LICENSE_KEY
php artisan location:update
لتنزيل أحدث ملف .mmdb
في دليل database/maxmind
الخاص بكملاحظة : ضع في اعتبارك أنك ستحتاج إلى تحديث هذا الملف عن طريق تشغيل
location:update
بشكل منتظم لاسترداد أحدث المعلومات من زوار موقعك.
في ملف التكوين، يمكنك تحديد العدد الذي تريده من برامج التشغيل الاحتياطية. يوصى بتكوين برنامج تشغيل MaxMind باستخدام ملف .mmdb
لقاعدة البيانات المحلية (المذكور أعلاه)، بحيث يمكنك دائمًا استرجاع بعض معلومات الموقع العامة من الزائر.
في حالة حدوث استثناء أثناء محاولة الحصول على برنامج تشغيل (مثل خطأ 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، يمكن الآن لبرامج تشغيل الموقع تنفيذ واجهة Updatable
تسمح لها بالتحديث باستخدام أمر location:update
. حاليًا، يدعم برنامج تشغيل MaxMind هذا فقط.
لتحديث ملف التكوين الخاص بك لتتمكن من تنزيل أحدث ملف لقاعدة بيانات MaxMind تلقائيًا، أدخل خيار تكوين عنوان url
أدناه في ملف config/location.php
الخاص بك:
// 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')),
],
],
];
بمجرد الانتهاء، يمكنك تنفيذ الأمر الحرفي أدناه لتنزيل أحدث ملف .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>
وتم إنشاؤها وفقًا للمبادئ التوجيهية التالية:
لا تتم صيانة الإصدارات الثانوية بشكل فردي، وننصحك بالترقية إلى الإصدار الثانوي التالي.
يتم الاحتفاظ بالإصدارات الرئيسية بشكل فردي من خلال فروع منفصلة.