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:
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)
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é)
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.