ดึงข้อมูลตำแหน่งของผู้เยี่ยมชมจากที่อยู่ 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 หาก API ของผู้ให้บริการเปลี่ยนแปลง) ระบบจะใช้ไดรเวอร์ถัดไปในบรรทัดโดยอัตโนมัติ
หากต้องการสร้างไดรเวอร์ของคุณเอง เพียงสร้างคลาสในแอปพลิเคชันของคุณ และขยาย abstract Driver:
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;
}
}
ตำแหน่งได้รับเวอร์ชันภายใต้แนวทางการกำหนดเวอร์ชันแบบ Semantic ให้มากที่สุดเท่าที่จะเป็นไปได้
การเผยแพร่จะมีหมายเลขตามรูปแบบต่อไปนี้:
<major>.<minor>.<patch>
และสร้างโดยมีแนวทางดังนี้
เวอร์ชันรองจะไม่ได้รับการดูแลแยกกัน และคุณควรอัปเกรดเป็นเวอร์ชันรองถัดไป
เวอร์ชันหลักจะได้รับการดูแลเป็นรายบุคคลผ่านสาขาที่แยกจากกัน