Poskytovateľ maxmind_database číta lokálny súbor MaxMind .mmdb (GeoLite2 alebo GeoIP2) natívnou binárnou čítačkou zabudovanou v balíku — bez závislosti geoip2/geoip2 či maxmind-db/reader. Vyhľadávanie prebieha na vašich serveroch: žiadna sieťová komunikácia, žiadne poplatky za požiadavku, žiadne limity a IP návštevníka neopustí vašu infraštruktúru. Zapnite ho a nasmerujte na databázu stiahnutú v rámci vašej licencie MaxMind:
MAXMIND_DB_ENABLED=true
MAXMIND_DB_PATH=/var/data/GeoLite2-City.mmdb # defaults to storage_path('app/geolocation/GeoLite2-City.mmdb')Čítačka podporuje veľkosti záznamov 24, 28 a 32 bitov a vyhľadávanie IPv4 v IPv6 databázach. Z anglických názvov v zázname mapuje mesto, prvú subdivíziu ako región, ISO kód krajiny, PSČ, súradnice a časové pásmo.
Stiahnutie databázy
geolocation:db:update stiahne archív GeoLite2/GeoIP2 z MaxMind a zapíše .mmdb na nastavenú cestu — gzipovaný tarball rozbalí natívne (ext-zlib + ext-phar) a v prípade potreby vytvorí adresár. Nastavte licenčný kľúč a edíciu:
MAXMIND_LICENSE_KEY=your-license-key
MAXMIND_DB_EDITION=GeoLite2-City # GeoLite2-City | GeoLite2-Country | a GeoIP2 editionphp artisan geolocation:db:update
php artisan geolocation:db:update --edition=GeoLite2-Country --path=/var/data/geo.mmdbPríkaz je len tenkým obalom nad Geolocation::updateDatabase(), ktorú môžete zavolať aj z kódu — oba argumenty sa predvolene berú z konfigurácie vyššie a metóda vráti zapísanú cestu:
use RoundlyConsulting\Geolocation\Facades\Geolocation;
$path = Geolocation::updateDatabase(); // config edition and path
$path = Geolocation::updateDatabase('GeoLite2-Country', '/var/data/country.mmdb');Chýbajúci licenčný kľúč či cesta, neúspešné stiahnutie (chyba HTTP, timeout alebo nedostupný server) alebo archív, ktorý sa nedá rozbaliť, vyhodia DatabaseUpdateException; príkaz vypíše rovnakú správu a skončí nenulovým kódom. Licenčný kľúč putuje v URL na stiahnutie, preto sa zo správy odstráni a výnimka prenosu sa nepripája ako previous.
Nový súbor sa zapíše vedľa starého a potom sa naň premenuje, takže vyhľadávanie počas aktualizácie číta buď starú, alebo novú databázu, nikdy nie napoly zapísaný súbor. Neúspešná aktualizácia ponechá súčasnú databázu na mieste. MaxMind databázy pravidelne aktualizuje, preto si obnovu naplánujte:
// routes/console.php
use Illuminate\Support\Facades\Schedule;
Schedule::command('geolocation:db:update')->weekly();Chyby
- IP, ktorá v databáze nie je, vráti null a skúsi sa ďalší poskytovateľ.
- Keď je poskytovateľ zapnutý, ale súbor chýba (alebo nie je nastavená cesta), vyhodí DatabaseNotFoundException so správou, že treba spustiť php artisan geolocation:db:update.
- Poškodený súbor vyhodí InvalidDatabaseException.
Dlhobežiace procesy
Súbor sa do pamäte načíta raz za proces (GeoLite2-City má desiatky megabajtov) a zdieľajú ho všetky vyhľadávania — nič netreba registrovať. Keď sa súbor na disku zmení, napríklad po geolocation:db:update, najbližšie vyhľadávanie ho načíta znova, takže queue workery aj Octane dostanú obnovenú databázu bez reštartu.
Priame čítanie záznamov
Rovnaká čítačka je dostupná aj na priamy prístup ku všetkým poliam záznamu:
use RoundlyConsulting\Geolocation\MaxMind\Reader;
$reader = new Reader(storage_path('app/geolocation/GeoLite2-City.mmdb'));
$record = $reader->get('203.0.113.7'); // the decoded record as an array, or null
$reader->metadata()->databaseType; // from the file's own metadata
$reader->metadata()->ipVersion;Webová služba MaxMind
Poskytovateľ maxmind_web volá webovú službu MaxMind GeoIP2 Precision s autentifikáciou HTTP Basic (ID účtu a licenčný kľúč). Predvolene je vypnutý; zapnite ho a zvoľte službu:
MAXMIND_WEB_ENABLED=true
MAXMIND_ACCOUNT_ID=123456
MAXMIND_LICENSE_KEY=your-license-key
MAXMIND_WEB_SERVICE=city # city | country | insightsRešpektuje prepisy pri volaní: withToken('maxmind_web', …) nahradí pre jedno volanie licenčný kľúč (ID účtu zostane nastavené) a withTimeout() nahradí geolocation.timeout. Nedostupná webová služba sa preskočí ako každý iný HTTP poskytovateľ.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.