• Operatörü ip ile belirlemek için PHP betiği. Ziyaretçinin şehrinin tanımı. PHP GeoIP - standart üçüncü taraf işlevselliği

    Mağazanın dönüşüm oranlarını iyileştirmek için ziyaretçinin şehrini görüntüleyin. Şehir, bölge ve ülke ile sitenin herhangi bir yerinde hazır embed kodu. Bir sürü komut dosyası kürekledim, ama bu en basit ve en etkili olduğu ortaya çıktı! Komut dosyasının çıktığı www.mzm-market.ru sitesini oluştururken kullandım. "______'a teslimat"

    Aşağıdaki kodu index.tpl'de (veya teslimat sayfasında) istediğiniz herhangi bir yere yapıştırın:




    Çıktı kullanılarak yapılır:

    // ülke, şehir, bölge.
    coğrafi konum.ülke, coğrafi konum.şehir, coğrafi konum.bölge

    Bu gönderiyi biraz tamamlamak istiyorum (18.02.2017 tarihinde düzenlendi).

    Yukarıdaki betiği birçok şehirde ve tarayıcıda kullanırken hiçbir şey görüntülenmiyordu ve uzun bir aramadan sonra Yandex API aracılığıyla ülke, bölge, şehir belirlemek için muhtemelen en verimli komut dosyasını buldum. Neredeyse tüm Rusya'da ve yurtdışında bulunan müşterilerim aracılığıyla test ettim ve bu senaryonun mükemmel olduğu kanıtlandı! İşte müşterimin bir ekran görüntüsü:

    Her şeyin açıkça tanımlandığını anlıyorsunuz! Pekala, size yazarak eziyet etmeyeceğim ve bir örnek vermeyeceğim!

    js Yandex API üzerinden ülke, bölge, şehir belirleme

    Sadece bu kodu etiketler arasına yapıştırın



    Ve bu kod sayfanızda doğru yerde:

    Ülkeniz: ... belirlenecek...

    Şehriniz: ... tarafından belirlenir...

    Bölgeniz: ... tarafından belirlenir...

    Gösteri

    Senin ülken: ... azimli...

    Senin şehirin: ... azimli...

    Bölgeniz: ... azimli...

    Komut dosyası sorunsuz çalışıyor ancak küçük köylerde yaşayanlar için şehir büyük olasılıkla yanlış belirlenebilir ancak İnternet sağlayıcınızın şehri belirlenecektir.

    Yazardan:İnternette adınız ve soyadınız hiçbir şey ifade etmez. Burada kullanıcıyı tanımlamak için IP kullanılır. Bunu bilerek, bir kişinin ikamet ettiği şehri ve ülkeyi, kullanılan tarayıcıyı ayarlayabilirsiniz .... İnanmıyor musun? PHP'de IP tanımını incelediğinizde tüm bunları anlayacaksınız.

    IP ve daha fazlası

    PHP, kullanıcının ağ bilgilerini almak için global bir $_SERVER dizisine sahiptir. İçeriğini ekranda gösterelim:

    Artık IP'nin REMOTE_ADDR'ye yazıldığını biliyoruz. Nereden geliyor? Tüm bu veriler, bağlantı kurulumu sırasında müşteri tarafından gönderilir. Bu değişken, istemci tarafındaki sunucu ayarlarında ayarlanır.

    Bazı insanlar PHP'de şehri IP'ye göre belirlemek için HTTP başlık değerlerini kullanır, ancak bu temelde yanlıştır. Herhangi bir kullanıcı, ana bilgisayarı için başlık değerleri ayarlayabilir. Hangi IP'ye ihtiyacınız olduğunu da anlamalısınız. Örneğin, HTTP_X_FORWARDED_FOR değeri uzak istemcinin adresini, proxy'sini içerir veya boş olabilir. Kısacası bir akşam çözmek yetmez.

    Kullanıcının tarayıcısına gelince, onu get_browser () işlevini kullanarak belirlemeye çalışabilirsiniz. Ancak istemci tarafında kullanımı için, php.ini dosyasında browscap.ini yolunun belirtilmesi gerekir. Aksi takdirde, benzer bir uyarı alırsınız:

    Kullanıcının ülkesini öğreniyoruz ve sadece

    Şimdi PHP kullanarak ülkeyi IP ile belirleyeceğiz. Ama önce, bu alandaki tüm çözümleri gözden geçirelim. Bu betiklerin çoğu, bahsettiğimiz $_SERVER REMOTE_ADDR global dizi öğesini kullanır. Şimdi en önemli şey başlıyor.

    Alınan IP'nin basitçe değerine göre sıralandığı zaten kullanabilirsiniz. Umarım bu değerin müşteriye (ana bilgisayar) coğrafi konumuna bağlı olarak atandığı bir sır değildir: ülke, şehir ve kullanıcının ikamet ettiği bölge. Tüm işlevsellik, bu aralıkların analizine dayanmaktadır.

    ip-whois.net gibi çeşitli üçüncü taraf hizmetleri de kullanılır. Komut dosyasının yardımıyla IP'nin değerini iletirsiniz ve size ana bilgisayarın konumu hakkında bilgi verir.

    Ek olarak, bazı özel kütüphaneler kendi veritabanlarıyla birlikte gelir ve tabloları (coğrafyaya göre) sıralanmış tüm IP aralıklarını içerir. Onları listelemeyeceğim. Artık internette bunlardan yeterince var.

    Sen karar ver. Üçüncü taraf bir hizmetin kullanılması, kaynakların maliyetini ve sitenizdeki yükü azaltacaktır. Aynı zamanda kütüphanenin baza ile kullanılması bağlantı problemlerini ortadan kaldıracaktır.

    Aşağıdaki komut dosyası, bölgeyi PHP IP'ye göre belirlemek için TabGeo kitaplığını kullanır. Şimdi resmi kaynağı çalışmıyor. Kitaplığı GitHub'dan indirdim ancak yalnızca country.php dosyasını kullandım. İçinde, kullanıcının ikamet ettiği ülke, alınan IP tarafından belirlenir. Ve sonra (ISO koduna göre) sitenin çeşitli sayfalarına yönlendirmeler uygulayabilirsiniz:

    include("ülke.php");

    $ip = $_SERVER["UZAK_ADDR"] ;

    $geopoloj = katman ($ip ) ;

    geçiş ($geopoloj) (

    durum "BE":

    Yüksek hız ile karakterize edilen "bisikletimden" bahsedildi. Popüler sorulardan biri, şehri IP ile belirleme olasılığıydı.

    Ve şimdi, birkaç ay sonra, "eğlenmek için" başlayan proje, bağımsız bir projeye dönüştü.
    API ve veritabanlarının en son sürümlerini indirebileceğiniz ve belgeleri okuyabileceğiniz Sypex Geo projesine ayrılmış ayrı bir site açıldı.

    Şehri IP ile belirlemenin doğruluğunu hızlı bir şekilde test etmek isteyenler için - işte demo sayfasına bir bağlantı. Ve habrakat altında bazı teknik detayları anlatacağım ve küçük bir testin sonuçlarını vereceğim.

    Sypex Geo 2.1 formatı

    Son makalenin yayınlanmasından bu yana, Sypex Geo formatı (SxGeo olarak kısaltılır) optimize edildi ve veri tabanına iki referans kitabı - şehirler ve bölgeler - dahil etme yeteneği eklendi.

    Yeni bir format oluştururken aşağıdaki öncelikler belirlendi:

    • yüksek hız
    • düşük kaynak tüketimi
    • açıklık (veritabanı ikili dosya biçimi belirtimleri ve API açıktır)
    • evrensellik (herhangi bir veri kümesiyle veritabanları oluşturma yeteneği)
    Biçim, verileri farklı kodlamalarda saklamanıza olanak tanır. Beta sürümünden ayrıldıktan sonra, veritabanını MySQL'den ikili bir DB dosyasına dönüştürmek için komut dosyaları yayınlanacaktır.

    Veritabanı aşağıdaki bilgileri saklar:

    • Ülke Kimliği
    • ISO 3166-1 ülke kodu (iki karakter)
    • FIPS 10-4 bölge kodu (iki karakter)
    • Bölge adı (isteğe bağlı)
    • Şehir
    • Enlem
    • Boylam
    • saat dilimi (isteğe bağlı)
    Bu liste gerektiği gibi değiştirilebilir ve/veya genişletilebilir. SxGeo 2.1 formatı hakkında daha fazla bilgi web sitesinde bulunabilir.

    Kendi veritabanı

    MaxMind'in popüler GeoLite City konum belirleme sistemiyle çok yakından tanıştıktan sonra kendi veritabanımızı oluşturmaya karar verdik. Sorun şu ki, GeoLite City'de çok sayıda yanlışlık, çöp, yinelenen şehirler, aşırı aralık bölünmesi ve ayrıca eski SSCB şehirleriyle ilgili sorunlar var (örneğin, şehirler yerine, şirketlerin adları veya sorumluların adları) Whoiler'den alınmıştır).

    Veritabanı şu anda GeoLite City'ye dayanmaktadır, ancak halihazırda Rusya, Ukrayna ve Beyaz Rusya'nın tamamen yeniden tasarlanmış bir kapsamını içermektedir. Yavaş yavaş, başta BDT ve Avrupa olmak üzere diğer ülkeler belirtilecektir. Sypex Geo City veri tabanı, UTF-8'de (hala çevrilmemiş isimler var) Rusça şehir ve bölge adlarının yanı sıra saat dilimini içerir.

    Ayrıca SxGeo 2.1 formatına dönüştürülmüş diğer veritabanları da sitede mevcuttur.

    Kullanım

    Sypex Geo API'nin kullanımı mümkün olduğunca basittir.
    1. SxGeo.php ve SxGeoCity.dat'ı (veya diğer veritabanlarını) sunucuya kopyalayın 2. SxGeo.php dosyasını, include("SxGeo.php"); satırını ekleyerek betiğinize dahil edin. 3. Bir SxGeo nesnesi oluşturun //$SxGeo = new SxGeo(); // Varsayılan mod, veritabanı dosyası SxGeo.dat $SxGeo = new SxGeo("SxGeoCity.dat", SXGEO_BATCH | SXGEO_MEMORY); // En hızlı mod 4. Şehri belirleyin (SxGeo City, GeoLite City, IpGeoBase) $SxGeo->get($ip); (bölge adı ve saat dilimi olmadan şehir hakkında bilgi verir) // $SxGeo->getCityFull($ip); (şehir ve bölge hakkında tam bilgi verir)

    Performans testi

    Ve tatlı olarak, biraz karşılaştırmalı performans testi. Rakipler GeoLite API ve Geobaza API'dir. Tüm test katılımcıları kendi biçimlerine sahip bir ikili veritabanı kullanır ve PHP API'sini kullanır. Test, Win 7 (oranlar Linux'ta korunur), PHP 5.2.17 altında yapılır.

    Ortalama alma ve onluğa yuvarlama olmak üzere iki modda (normal ve bellek içi önbelleğe alma) her API için 10 çalıştırmadan sonraki sonuçlar. Her çalıştırma için 50.000 rastgele IP adresi dizisi oluşturulur ve her algoritma bir döngü içinde aranır.

    Öneri ve dileklere açığız. Ayrıca API'yi diğer dillere taşımak, Apache ve nginx için modüller oluşturmak konusunda yardımcı olmak isteyenler arıyoruz.