• Php skript pro určení operátora podle ip. Definice města návštěvníka. PHP GeoIP - standardní funkce třetích stran

    Zobrazte město návštěvníka, abyste zlepšili míru konverze obchodu. Připravený kód pro vložení kdekoli na webu s městem, regionem a zemí. Naházel jsem spoustu skriptů, ale tento se ukázal jako nejjednodušší a nejúčinnější! Použil jsem to při vytváření stránek www.mzm-market.ru , kde jsou výstupy skriptu "doručit ______"

    Vložte následující kód do index.tpl (nebo na doručovací stránku) na libovolné místo:




    Výstup se provádí pomocí:

    // země, město, region.
    geolocation.country, geolocation.city, geolocation.region

    Tento příspěvek chci trochu doplnit (upraveno 18.02.2017).

    Při použití výše uvedeného skriptu v mnoha městech a prohlížečích se nic nezobrazovalo a po dlouhém hledání jsem našel asi nejefektivnější skript pro určení země, regionu, města přes Yandex API. Testoval jsem to přes své klienty, kteří se nacházejí téměř po celém Rusku i v zahraničí, a tento skript se osvědčil! Zde je snímek obrazovky mého klienta:

    Chápete, že vše bylo jasně definováno! No nebudu vás mučit psaním a uvedu příklad!

    js Určení země, regionu, města prostřednictvím rozhraní Yandex API

    Stačí vložit tento kód mezi značky



    A tento kód na správném místě na vaší stránce:

    Vaše země: ... bude určeno...

    Vaše město: ... určeno podle...

    Váš region: ... určen podle...

    Demonstrace

    Vaše země: ... odhodlaný...

    Tvoje město: ... odhodlaný...

    Váš region: ... odhodlaný...

    Skript funguje bez problémů, ale je možné, že pro ty, kteří jsou v malých vesnicích, bude s největší pravděpodobností špatně určeno město, ale bude určeno město vašeho poskytovatele internetu.

    Od autora: Na internetu vaše jméno a příjmení nic neříkají. Zde se IP používá k definování uživatele. Když to víte, můžete nastavit město a zemi bydliště osoby, použitý prohlížeč .... nevěříš? To vše pochopíte, když si prostudujete definici IP v PHP.

    IP a další

    PHP má globální pole $_SERVER pro získání informací o síti uživatele. Zobrazme jeho obsah na obrazovce:

    Nyní víme, že IP je zapsána do REMOTE_ADDR. Odkud to pochází? Všechny tyto údaje odesílá klient při navazování spojení. Tato proměnná se nastavuje v nastavení serveru na straně klienta.

    Někteří lidé používají hodnoty hlaviček HTTP k určení města podle IP v PHP, ale to je zásadně špatné. Každý uživatel může nastavit hodnoty záhlaví pro svého hostitele. Měli byste také pochopit, jakou IP potřebujete. Například hodnota HTTP_X_FORWARDED_FOR obsahuje adresu vzdáleného klienta, jeho proxy nebo může být prázdná. Zkrátka na to přijít na jeden večer nestačí.

    Pokud jde o prohlížeč uživatele, můžete jej zkusit určit pomocí funkce get_browser (). Ale pro jeho použití na straně klienta musí být cesta k browscap.ini specifikována v souboru php.ini. V opačném případě se zobrazí podobné varování:

    Učíme se zemi uživatele a nejen to

    Nyní pomocí PHP určíme zemi podle IP. Nejprve si ale zopakujme všechna řešení v této oblasti. Většina těchto skriptů používá prvek globálního pole $_SERVER REMOTE_ADDR, který jsme zmínili. Nyní začíná to nejdůležitější.

    Můžete použít již, ve kterém se přijatá IP jednoduše třídí v závislosti na její hodnotě. Doufám, že pro vás není tajemstvím, že tato hodnota je přiřazena klientovi (hostiteli) v závislosti na jeho geolokaci: země, město a region bydliště uživatele. Celá funkčnost je založena na analýze těchto rozsahů.

    Používají se také různé služby třetích stran, jako je ip-whois.net. Pomocí skriptu předáte hodnotu IP a ten vám vrátí informaci o umístění hostitele.

    Některé ze specializovaných knihoven navíc přicházejí s vlastní databází, jejíž tabulky obsahují všechny rozsahy IP seřazené (podle geografie). Nebudu je vypisovat. Těch je teď na webu dost.

    Vy rozhodnete. Použití služby třetí strany sníží náklady na zdroje a zatížení vašeho webu. Zároveň používání knihovny se základnou odstraní problémy s připojením.

    Následující skript používá knihovnu TabGeo k určení regionu pomocí IP adresy PHP. Nyní jeho oficiální zdroj nefunguje. Stáhl jsem si knihovnu z GitHubu, ale použil jsem pouze soubor country.php. V něm je země bydliště uživatele určena přijatou IP. A pak (podle kódu ISO) můžete implementovat přesměrování na různé stránky webu:

    include("země.php");

    $ip = $_SERVER [ "VZDÁLENÁ_ADRESA" ] ;

    $geopoloj = strana ($ip ) ;

    přepínač ($geopoloj ) (

    případ "BE":

    Ve kterém bylo zmíněno moje „kolo“, které se vyznačuje vysokou rychlostí. Jednou z oblíbených otázek byla možnost určení města podle IP.

    A nyní, o pár měsíců později, se projekt, který začal jako „pro zábavu“, rozrostl v samostatný projekt.
    Byl otevřen samostatný web věnovaný projektu Sypex Geo, kde si můžete stáhnout nejnovější verze API a databází a také si přečíst dokumentaci.

    Pro ty, kteří si chtějí rychle otestovat správnost určení města podle IP - zde je odkaz na demo stránku. A pod habrakat popíšu nějaké technické detaily a dám výsledky malého testu.

    Formát Sypex Geo 2.1

    Od vydání posledního článku byl optimalizován formát Sypex Geo (zkráceně SxGeo) a do databáze byla přidána možnost zahrnout dvě referenční knihy – města a regiony.

    Při vytváření nového formátu byly nastaveny následující priority:

    • vysoká rychlost
    • nízká spotřeba zdrojů
    • otevřenost (specifikace formátu binárního souboru databáze a API jsou otevřené)
    • univerzálnost (schopnost vytvářet databáze s libovolnými datovými sadami)
    Formát umožňuje ukládat data v různých kódováních. Po opuštění beta verze budou publikovány skripty pro převod databáze z MySQL do binárního DB souboru.

    V databázi jsou uloženy následující informace:

    • ID země
    • Kód země ISO 3166-1 (dva znaky)
    • Kód regionu FIPS 10-4 (dva znaky)
    • Název oblasti (volitelné)
    • Město
    • Zeměpisná šířka
    • Zeměpisná délka
    • časové pásmo (volitelné)
    Tento seznam lze podle potřeby upravit a/nebo rozšířit. Více informací o formátu SxGeo 2.1 naleznete na webu.

    Vlastní databáze

    Po velmi blízkém seznámení s oblíbeným geolokačním systémem GeoLite City od MaxMind bylo rozhodnuto o vytvoření vlastní databáze. Problém je v tom, že GeoLite City má spoustu nepřesností, odpadky, duplicitní města, přílišné dělení areálů a také problémy s městy bývalého SSSR (například místo měst názvy firem nebo jména odpovědných z Whois jsou převzaty).

    Databáze je aktuálně založena na GeoLite City, ale již obsahuje zcela přepracované pokrytí Ruska, Ukrajiny a Běloruska. Postupně budou upřesňovány další země, především SNS a Evropa. Databáze Sypex Geo City obsahuje názvy měst a regionů v ruštině v UTF-8 (stále existují nepřeložená jména) a také časové pásmo.

    Kromě toho jsou na webu k dispozici další databáze převedené do formátu SxGeo 2.1.

    Používání

    Použití Sypex Geo API je maximálně jednoduché.
    1. Zkopírujte SxGeo.php a SxGeoCity.dat (nebo jiné databáze) na server 2. Zahrňte soubor SxGeo.php do svého skriptu přidáním řádku include("SxGeo.php"); 3. Vytvořte objekt SxGeo //$SxGeo = new SxGeo(); // Výchozí režim, databázový soubor SxGeo.dat $SxGeo = new SxGeo("SxGeoCity.dat", SXGEO_BATCH | SXGEO_MEMORY); // Nejrychlejší režim 4. Určete město (SxGeo City, GeoLite City, IpGeoBase) $SxGeo->get($ip); (vrací informace o městě, bez názvu regionu a časového pásma) // $SxGeo->getCityFull($ip); (vrací úplné informace o městě a regionu)

    Testování výkonu

    A jako dezert malé srovnávací testování výkonu. Odpůrci jsou GeoLite API a Geobaza API. Všichni účastníci testu používají binární databázi vlastního formátu a používají PHP API. Testování probíhá pod Win 7 (proporce jsou zachovány na Linuxu), PHP 5.2.17.

    Výsledky po 10 spuštěních pro každé API ve dvou režimech (normální a ukládání do mezipaměti) zprůměrování a zaokrouhlení na desítky. Pro každý běh je vytvořeno pole 50 000 náhodných IP adres a každý algoritmus je prohledáván ve smyčce.

    Návrhy a přání jsou vítány. Hledáme také ty, kteří chtějí pomoci s portováním API do jiných jazyků a vytvářením modulů pro Apache a nginx.