Dapatkan Geolokasi dengan Negara berdasarkan Alamat IP di PHP

oleh Vincy. Terakhir diubah pada 20 Mei 2021.

Apakah situs web Anda meminta pelanggan untuk memasukkan negara mereka atau data terkait lokasi? jika demikian, lebih baik mendapatkannya secara otomatis dengan menggunakan API geolokasi.

Saya telah menggunakan layanan API geolokasi populer untuk mendapatkan lokasi pelanggan untuk toko produk digital saya.

Itu selalu baik untuk mengurangi upaya pengguna akhir memasukkan data. Kita harus membuat mereka merasa senang dengan membuat prosesnya mulus.

Kita akan melihat cara mendapatkan geolokasi dengan nama dan kode negara menggunakan alamat IP. Ini adalah proses dua langkah di mana langkah 1 adalah untuk mendapatkan alamat IP dan langkah 2 adalah untuk mendapatkan geolokasi.

Apa yang ada di dalam?

  1. Tentang contoh ini
  2. Penggunaan yang berbeda untuk mendapatkan Geolokasi
  3. Struktur file
  4. Dapatkan dan validasi alamat IP saat ini
  5. Siapkan permintaan API untuk mendapatkan geolokasi melalui PHP cURL
  6. Output: Respons API – geolokasi dengan negara
  7. API Geolokasi Alternatif

Tentang contoh ini

Contoh ini menggunakan alat API geolokasi IPWhoIs untuk mencari data lokasi dengan menggunakan alamat IP.

Lengkapi Data Geolokasi berdasarkan IP

Titik akhir API ini mencari IPv4, IPv6, atau domain apa pun sebagai parameter bersama dengan permintaan geolokasi untuk dibaca.

Kode ini menjalankan proses 2 langkah untuk menampilkan data lokasi.

Ini menciptakan layanan PHP dengan fungsi untuk mendapatkan alamat IP pengguna dari array $_SERVER.

Kemudian, ia akan menggunakan alamat IP untuk mengatur opsi cURL untuk membaca data geolokasi.

Ini akan menampilkan nama negara, kode, dan IP yang diberikan dengan mengurai respons API JSON.

Penggunaan yang berbeda untuk mendapatkan Geolokasi

Ada lebih banyak kegunaan untuk mendapatkan geolokasi pengguna dengan alamat IP.

  • Ini memberikan akurasi dan keandalan data lokasi sedangkan pengguna dapat memasukkan data yang salah.
  • Ini menyediakan titik masuk tunggal untuk mendapatkan data yang akan digunakan di banyak tempat, seperti konverter mata uang berbasis lokasi, perhitungan pengiriman atau banyak lagi.
  • Untuk menghitung statistik kunjungan berdasarkan wilayah.
  • Ini membantu untuk mengganti bahasa konten situs web multibahasa dengan melokalkan pengunjung.
  • Untuk memplot lokasi pengguna pada lapisan peta UI. Google Maps JavaScript API menyediakan layanan Geolokasi untuk menampilkan lokasi pengguna dan perangkat di peta.

Struktur file

Gambar struktur file di bawah ini menunjukkan kesederhanaan contoh ini dengan jumlah file minimal.

Itu Permintaan.php file memiliki fungsi utama yang menjalankan dua langkah untuk mendapatkan data IP dan geolokasi.

Itu index.php file memanggil layanan untuk mendapatkan data lokasi dan mengisinya di UI.

Dapatkan Struktur File Lokasi Geo

Dapatkan dan validasi alamat IP saat ini

Ini adalah kode halaman rumah yang berisi kode HTML untuk mengakui pengguna dengan data geolokasi saat ini.

Itu mengimpor kelas layanan lokasi memanggil metode untuk mendapatkan dan memvalidasi alamat IP.

Setelah IP divalidasi dan kembali benar, ia meminta data geolokasi. Atau yang lain, itu akan menampilkan pesan kesalahan ke UI.

index.php


<?php
require_once 'lib/Request.php';
$requestModel = new Request();
$ip = $requestModel->getIpAddress();
$isValidIpAddress = $requestModel->isValidIpAddress($ip);
?>
<HTML>
<HEAD>
<TITLE>Get Geo Location by the IP address</TITLE>
<link href="https://phppot.com/php/get-geolocation-with-country-by-ip-address-in-php/assets/css/style.css" type="text/css" rel="stylesheet" />
</HEAD>
<BODY>
	<div class="txt-heading">Get Geo Location by the IP address</div>
			<?php
if ($isValidIpAddress == "") {
    echo "<div class="error">Invalid IP address $ip</div>";
} else {
    $geoLocationData = $requestModel->getLocation($ip);
    print "<PRE>";
    print_r($geoLocationData);
    ?>
	<div id="location">
		<div class="geo-location-detail">

			<div class="row">
				<div class="form-label">
					Country Name: <?php  echo $geoLocationData['country'];?>
				</div>
			</div>
			<div class="row">
				<div class="form-label">
					Country Code: <?php   echo $geoLocationData['country_code'];?>
				</div>
			</div>
			<div class="row">
				<div class="form-label">
					Ip Address: <?php  echo $geoLocationData['ip'];?>
				</div>
			</div>
		</div>
	</div>
<?php }?>
</BODY>
</HTML>

Siapkan permintaan API untuk mendapatkan geolokasi melalui PHP cURL

Itu getIPaddress() function membangun tangga if-else-if dari sebagian besar skenario untuk mendapatkan alamat IP yang tidak kosong menggunakan variabel $_SERVER.

Setelah IP divalidasi dan kembali benar, itu dapatkanLokasi() berfungsi untuk meminta ipwhois API melalui cURL.

API akan mengembalikan respons JSON sebagai hasilnya. Contoh ini mendekode respons JSON dan mem-parsing data geolokasi untuk mendapatkan detail negara darinya.

lib/Request.php

<?php
class Request
{

    public function getIpAddress()
    {
        $ipAddress="";
        if (! empty($_SERVER['HTTP_CLIENT_IP']) && $this->isValidIpAddress($_SERVER['HTTP_CLIENT_IP'])) {
            // check for shared ISP IP
            $ipAddress = $_SERVER['HTTP_CLIENT_IP'];
        } else if (! empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            // check for IPs passing through proxy servers
            // check if multiple IP addresses are set and take the first one
            $ipAddressList = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
            foreach ($ipAddressList as $ip) {
                if ($this->isValidIpAddress($ip)) {
                    $ipAddress = $ip;
                    break;
                }
            }
        } else if (! empty($_SERVER['HTTP_X_FORWARDED']) && $this->isValidIpAddress($_SERVER['HTTP_X_FORWARDED'])) {
            $ipAddress = $_SERVER['HTTP_X_FORWARDED'];
        } else if (! empty($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']) && $this->isValidIpAddress($_SERVER['HTTP_X_CLUSTER_CLIENT_IP'])) {
            $ipAddress = $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
        } else if (! empty($_SERVER['HTTP_FORWARDED_FOR']) && $this->isValidIpAddress($_SERVER['HTTP_FORWARDED_FOR'])) {
            $ipAddress = $_SERVER['HTTP_FORWARDED_FOR'];
        } else if (! empty($_SERVER['HTTP_FORWARDED']) && $this->isValidIpAddress($_SERVER['HTTP_FORWARDED'])) {
            $ipAddress = $_SERVER['HTTP_FORWARDED'];
        } else if (! empty($_SERVER['REMOTE_ADDR']) && $this->isValidIpAddress($_SERVER['REMOTE_ADDR'])) {
            $ipAddress = $_SERVER['REMOTE_ADDR'];
        }
        return $ipAddress;
    }

    public function isValidIpAddress($ip)
    {
        if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) === false) {
            return false;
        }
        return true;
    }

    public function getLocation($ip)
    {
        $ch = curl_init('http://ipwhois.app/json/' . $ip);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $json = curl_exec($ch);
        curl_close($ch);
        // Decode JSON response
        $ipWhoIsResponse = json_decode($json, true);
        // Country code output, field "country_code"
        return $ipWhoIsResponse;
    }
}


Output: Respons API – geolokasi dengan negara

Gambar di bawah ini menunjukkan data lokasi dengan nama negara, kode.

Get-Geo Location Valid Ip Address

Jika alamat IP tidak valid, maka kode akan mengembalikan pesan kesalahan untuk mengakui pengguna.

Dapatkan Lokasi Geo Alamat Ip Tidak Valid

API Geolokasi Alternatif

Ini adalah beberapa alternatif API yang menyediakan layanan untuk mengakses data lokasi secara terprogram.

  1. GeoPlugin layanan memungkinkan akses dari PHP, ASP, JavaScript dan banyak lagi.
  2. info IP perpustakaan untuk mendapatkan lokasi melalui otentikasi berbasis token.

PHP mendukung pengintegrasian paket GeoIP2 dari ekstensi PECL untuk mendapatkan data lokasi dengan menggunakan fungsi yang telah ditentukan. Kode untuk mendapatkan nama negara dari alamat IP atau nama domain adalah,


geoip_country_name_by_name ( $hostname );

Unduh

Kembali ke Atas


Source link