Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Lokalizacja IP
Forum PHP.pl > Forum > PHP
sebekzosw
Witam,

chciałbym zrobić lokalizację po IP.

Obecnie mam taki skrypt:

  1. $ip = 'http://api.ipinfodb.com/v3/ip-city/?key=key&ip='.$_SERVER["REMOTE_ADDR"].'&format=json';
  2. $array = json_decode(file_get_contents($ip), true);
  3.  
  4. echo 'Twoja lokalizacja to: '.ucfirst(strtolower($array['cityName'])).', '.$array['regionName'].', '.$array['countryCode'];


w celu przyśpieszenia działania skryptu stwierdziłem, że lepiej będzie ip z dopisaną lokalizacją zapisywać w bazie, ale nie jestem przekonany, że to ma sens? IP zawsze ma stałą lokalizację czy jest ona raczej zmienna? Czekam na Wasze opinie :-)
Kofel
Ciekawa sprawa. IP z zasady nie zmienia położenia. Co się dzieje jeśli mamy zmienne IP? Większość geolokalizerów wskazuje i tak na miasto np. wojewódzkie w przypadku Telekomunikacji.
Zapisuj śmiało wszystko do bazy. Przecież ipinfodb.com nie ma dostępu do super ultra dokładnych danych.
abort
Cytat(sebekzosw @ 23.09.2012, 16:48:01 ) *
IP zawsze ma stałą lokalizację czy jest ona raczej zmienna? Czekam na Wasze opinie :-)


IP realne może się zmienić - jeden z lepszych przykładów podał @Kofel: Neo ze zmiennym IP.
IP w bazie (tej, którą odpytujesz) się nie zmieni, o ile ktoś nie zmieni wpisu w bazie. Przykład powodu zmiany wpisu to np. sytuacja, gdy X (operator, klient operatora) otrzymał adresy po kimś innym - czyli taka "spuścizna".
IMHO warto zaryzykować na trzymanie lokalnej kopii bazy danych z adresacją IP i przypisaną lokalizacją i odpytywanie lokalnej bazy. Z jednym zastrzeżeniem: co pewien czas odświeżać swoją bazę - taki swoisty cache. Czyli:
- odpytujesz nowy ip - odpytujesz zewnętrzną bazę, dopisujesz do swojej bazy dane: ip, lokalizację, czas odpytania
Za jakiś czas możesz mieć znowu pytanie o dany IP, i wtedy:
- odpytujesz lokalną bazę, sprawdzasz, jak dawno temu zapisałeś dane. Jeśli zapisałeś niedawno (krócej niż X [dni/tygodni/miesiecy]), serwujesz dane ze swojej bazy. Jeśli dawno (dawniej niż X czasu temu), odpytujesz bazę zewnętrzną, aktualizujesz swoją.
Pojęcia "dawno" i "niedawno" są oczywiście względne i bazują na jakimś czasie, który musisz arbitralnie przyjąć. Na przykład tydzień, miesiąc, dwa miesiące, kwartał, pół roku...
Przyjęcie długiego czasu spowoduje zmniejszenie odpytań do bazy zewnętrznej, ale większe ryzyko zaserwowania starych danych (i dłuższy czas trzymania błędnych danych w lokalnej bazie)
Przyjęcie krótkiego czasu spowoduje, że w lokalnej bazie będziesz miał procentowo więcej aktualnych danych, ale częściej będziesz odpytywał zewnętrzną bazę.

Myślę, że do testów możesz zacząć od względnie krótkiego czasu typu miesiąc czy dwa.

P.S.
Adresy IP nie zmieniają właścicieli/lokalizacji zbyt często, a odpytanie zewnętrznej bazy to relatywnie mały ruch, więc nie wiem, czy to co robisz, to nie robota "sztuka dla sztuki".
sebekzosw
Na początek w sumie można pobrać bazę ip i je sprawdzać:

http://opengeo.pl/baza-adresow-ip-listopad-2011/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.