Saya ingin mengambil informasi seperti kota, negara bagian, dan negara pengunjung dari alamat IP mereka, sehingga saya dapat menyesuaikan halaman web saya sesuai dengan lokasi mereka. Apakah ada cara yang baik dan dapat diandalkan untuk melakukan ini di PHP? Saya menggunakan JavaScript untuk skrip sisi klien, PHP untuk skrip sisi server, dan MySQL untuk database.
php
geolocation
ip
geoip
Ben Dowling
sumber
sumber
Jawaban:
Anda bisa mengunduh database GeoIP gratis dan mencari alamat IP secara lokal, atau Anda bisa menggunakan layanan pihak ketiga dan melakukan pencarian jarak jauh. Ini adalah opsi yang lebih sederhana, karena tidak memerlukan pengaturan, tetapi memang memperkenalkan latensi tambahan.
Layanan pihak ketiga yang dapat Anda gunakan adalah milik saya, http://ipinfo.io . Mereka memberikan nama host, geolokasi, pemilik jaringan dan informasi tambahan, misalnya:
Berikut ini contoh PHP:
Anda juga dapat menggunakannya di sisi klien. Inilah contoh jQuery sederhana:
sumber
null
untuk nama kota saya. Itu tidak seperti kota kecil atau sesuatu tetapi masih tidak dapat menemukannya. Jika tidak bekerja dengan baik di AS, saya ragu seberapa sering itu juga akan mengembalikan nol di luar AS.Saya pikir saya akan memposting karena tampaknya tidak ada yang memberikan info tentang API khusus ini, tetapi mengembalikan persis apa yang saya cari dan Anda bisa mendapatkannya kembali dalam berbagai format
json, xml and csv
,.Ini akan memberi Anda semua hal yang mungkin Anda inginkan:
sumber
Contoh Javascript murni, menggunakan layanan https://geolocation-db.com. Mereka menyediakan solusi panggilan balik JSON dan JSONP.
Tidak diperlukan jQuery!
sumber
https://geoilocation-db.com
api?Menggunakan Google APIS:
sumber
The geolocation functionality in the Loader hasn't been retired, per se. We stopped documenting it several years ago and have recommended the HTML-based solutions due to their improved accuracy, but the functionality itself has not been removed from the Loader at this time.
code.google.com/p/google-ajax-apis/issues/detail?id=586Anda perlu menggunakan layanan eksternal ... seperti http://www.hostip.info/ jika Anda mencari "geo-ip" di google, Anda bisa mendapatkan hasil lebih banyak.
Host-IP API berbasis HTTP sehingga Anda dapat menggunakannya dalam PHP atau JavaScript tergantung kebutuhan Anda.
sumber
Saya menulis bot menggunakan API dari ipapi.co , berikut cara Anda bisa mendapatkan lokasi untuk alamat IP (mis.
1.2.3.4
) Diphp
:Setel tajuk:
Dapatkan respons JSON
dari mendapatkan bidang tertentu (negara, zona waktu, dll.)
sumber
Pertanyaan ini dilindungi, yang saya mengerti. Namun, saya tidak melihat jawaban di sini, yang saya lihat adalah banyak orang menunjukkan apa yang mereka dapatkan dari pertanyaan yang sama.
Saat ini ada lima Regional Internet Registries dengan berbagai tingkat fungsi yang berfungsi sebagai titik kontak pertama sehubungan dengan kepemilikan IP. Prosesnya berubah, itulah sebabnya berbagai layanan di sini kadang-kadang bekerja dan tidak di waktu lain.
Who Is (jelas) merupakan protokol TCP kuno, namun - cara kerjanya semula adalah dengan koneksi ke port 43, yang membuatnya bermasalah saat dialihkan melalui koneksi sewaan, melalui firewall ... dll.
Saat ini - kebanyakan Who Is dilakukan melalui RESTful HTTP dan ARIN, RIPE dan APNIC memiliki layanan RESTful yang berfungsi. LACNIC mengembalikan 503 dan AfriNIC tampaknya tidak memiliki API semacam itu. (Namun, semua memiliki layanan online.)
Itu akan memberi Anda - alamat pemilik terdaftar IP, tetapi - bukan lokasi klien Anda - Anda harus mendapatkannya dari mereka dan juga - Anda harus memintanya. Juga, proksi adalah yang paling tidak Anda khawatirkan saat memvalidasi IP yang menurut Anda adalah pencetusnya.
Orang tidak menghargai gagasan bahwa mereka sedang dilacak, jadi - menurut saya - dapatkan langsung dari klien Anda dan dengan izin mereka dan berharap banyak untuk menolak gagasan tersebut.
sumber
Lihatlah API dari hostip.info - ini menyediakan banyak informasi.
Contoh dalam PHP:
Jika Anda mempercayai hostip.info, sepertinya itu adalah API yang sangat berguna.
sumber
Layanan dalam respons Ben Dowling telah berubah, jadi sekarang lebih sederhana. Untuk menemukan lokasi, cukup lakukan:
Koordinat kembali dalam string tunggal seperti '31, -80 ', jadi dari sana Anda cukup:
sumber
Dengan asumsi Anda ingin melakukannya sendiri dan tidak bergantung pada penyedia lain, IP2Nation menyediakan database MySQL dari pemetaan yang diperbarui sebagai pendaftar regional mengubah hal-hal di sekitar.
sumber
Saya menjalankan layanan di IPLocate.io , yang dapat Anda hubungi secara gratis dengan satu panggilan mudah:
The
$res
objek akan berisi bidang geolocation Anda seperticountry
,city
, dllLihat dokumen untuk informasi lebih lanjut.
sumber
Saya suka GeoLite City gratis dari Maxmind yang berfungsi untuk sebagian besar aplikasi dan dari mana Anda dapat memutakhirkan ke versi berbayar jika tidak cukup akurat. Ada PHP PHP yang disertakan, serta untuk bahasa lain. Dan jika Anda menjalankan Lighttpd sebagai server web, Anda bahkan dapat menggunakan modul untuk mendapatkan informasi dalam variabel SERVER untuk setiap pengunjung jika itu yang Anda butuhkan.
Saya harus menambahkan ada juga Geolite Country gratis (yang akan lebih cepat jika Anda tidak perlu menentukan kota IP berasal dari) dan Geolite ASN (jika Anda ingin tahu siapa yang memiliki IP) dan yang akhirnya semua ini adalah dapat diunduh di server Anda sendiri, diperbarui setiap bulan dan cukup cepat untuk mencari dengan API yang disediakan karena mereka menyatakan "ribuan pencarian per detik".
sumber
PHP memiliki ekstensi untuk itu.
Dari PHP.net:
Sebagai contoh:
sumber
Ipdata.co adalah API Geolokasi IP yang cepat dan sangat tersedia dengan kinerja yang andal.
Ini sangat scalable dengan 10 titik akhir di seluruh dunia yang masing-masing mampu menangani> 10.000 permintaan per detik!
Dalam php
Berikut adalah contoh sisi klien yang menunjukkan bagaimana Anda mendapatkan negara, wilayah, dan kota;
Penolakan;
Saya membangun layanan.
Untuk contoh dalam berbagai bahasa, lihat Documents
Juga melihat ini analisis rinci dari yang terbaik IP Geolocation API.
sumber
Jika ada yang menemukan utas ini, inilah solusi lain. Di timezoneapi.io Anda dapat meminta alamat IP dan mendapatkan beberapa objek sebagai balasan (saya telah membuat layanan). Itu dibuat karena saya perlu tahu di zona waktu mana pengguna saya berada, di mana di dunia dan jam berapa saat ini.
Dalam PHP - mengembalikan lokasi, zona waktu, dan tanggal / waktu:
Menggunakan jQuery:
sumber
Berikut ini adalah versi modifikasi dari cuplikan yang saya temukan yang menggunakan http://ipinfodb.com/ip_locator.php untuk mendapatkan informasinya. Ingat, Anda juga dapat mengajukan kunci API dengan mereka dan menggunakan API secara langsung untuk mendapatkan informasi yang diberikan sesuai keinginan Anda.
Potongan
Menggunakan
sumber
Jika Anda perlu mendapatkan lokasi dari alamat IP Anda dapat menggunakan layanan geo ip yang andal, Anda bisa mendapatkan detail lebih lanjut di sini . Ini mendukung IPv6.
Sebagai bonus, ini memungkinkan untuk memeriksa apakah alamat ip adalah node, proxy publik, atau spammer.
Anda dapat menggunakan javascript atau php seperti di bawah ini.
Kode Javascript:
Kode Php:
Keluaran:
sumber
Saya telah membuat pembungkus untuk ipinfo.io . Anda dapat menginstalnya menggunakan komposer.
Anda dapat menggunakannya dengan cara ini:
sumber
Anda juga dapat menggunakan layanan "smart-ip":
sumber
Saya telah melakukan banyak pengujian dengan layanan alamat IP dan berikut adalah beberapa cara saya melakukannya sendiri. Pertama, banyak tautan ke situs web berguna yang saya gunakan:
https://db-ip.com/db Memiliki layanan ip-lookup gratis dan memiliki beberapa file csv gratis yang dapat Anda unduh. Ini menggunakan kunci api gratis yang dilampirkan ke email Anda. Batasnya 2.000 permintaan per hari.
http://ipinfo.io/ Layanan ip-lookup gratis tanpa fungsi PHP kunci-api:
Pada akhirnya Anda mendapatkan sesuatu seperti ini:
http://www.geoplugin.com/ Sedikit lebih tua tetapi layanan ini memberi Anda banyak informasi berguna tambahan seperti mata uang luar negeri, kode benua, bujur dan banyak lagi.
http://lite.ip2location.com/database-ip-country-region-city-latitude-longitude Menawarkan banyak file yang dapat diunduh dengan instruksi untuk mengimpornya ke dalam database Anda. Setelah Anda memiliki satu dari file-file ini di database Anda, Anda dapat memilih data dengan cukup mudah.
Gunakan fungsi php ip2long (); untuk mengubah alamat ip menjadi nilai numerik. Misalnya 1.1.1.1 menjadi 16843009. Ini memungkinkan Anda memindai rentang ip yang diberikan kepada Anda oleh file database.
Jadi untuk mengetahui di mana 1.1.1.1 milik kami, jalankan query ini:
Ini mengembalikan data ini sebagai contoh.
sumber
Ada 2 pendekatan luas untuk melakukan geolokasi IP: satu adalah mengunduh dataset, menyimpannya di infrastruktur Anda dan menjaganya tetap terbaru. Ini membutuhkan waktu dan usaha, terutama jika Anda perlu mendukung banyak permintaan. Solusi lain adalah dengan menggunakan layanan API yang ada yang mengelola semua pekerjaan untuk Anda dan banyak lagi.
Ada banyak layanan Geolokasi API: Maxmind, Ip2location, Ipstack, IpInfo, dll. Baru-baru ini, perusahaan tempat saya bekerja telah beralih ke Ipregistry ( https://ipregistry.co ) dan saya terlibat dalam proses pengambilan keputusan dan implementasi. Berikut adalah beberapa elemen yang harus Anda pertimbangkan saat mencari API geolokasi IP:
Berikut adalah contoh untuk mendapatkan informasi geolokasi IP (tetapi juga data ancaman dan agen pengguna menggunakan satu panggilan):
Catatan: Saya di sini bukan untuk mempromosikan Ipregistry dan mengatakan itu yang terbaik tetapi saya menghabiskan waktu lama menganalisis solusi yang ada dan solusi mereka benar-benar menjanjikan.
sumber
Jika Anda mencari database yang diperbarui / akurat saya sarankan untuk menggunakan yang ini di sini karena itu menunjukkan lokasi saya yang sebenarnya yang tidak termasuk dalam banyak layanan lain ketika saya sedang menguji.
(Kota saya dulu
Rasht
dan negara sayaIran
menggunakan alamat ip ini:2.187.21.235
ketika saya menguji.)Saya merekomendasikan untuk menggunakan database daripada metode API, karena akan diproses lebih cepat secara lokal.
sumber
Ok, teman-teman, terima kasih atas saran Anda; Meskipun saya memiliki 6 k + IP, beberapa layanan akan gagal permintaan saya karena beberapa batasan; Jadi, Anda bisa menggunakan semuanya dalam mode fallback;
Jika kami memiliki file sumber dengan format berikut:
daripada Anda bisa menggunakan perintah expample sederhana (PoC) ini untuk Yii:
Ini semacam kode yang menyebalkan, tetapi berhasil. pemakaian:
Jangan ragu untuk menggunakan, memodifikasinya, dan melakukannya dengan lebih baik)
sumber