Hitta Geolocation med IP-adress gratis i PHP
Att hitta geolokalisering och landinformation för en användare är nödvändig för de flesta webbplatser. Förmodligen måste du visa olika innehåll baserat på en användares land, visa olika priser enligt landets valutakoder etc. I dessa scenarier måste du hitta en användares geografiska placering och betjäna innehåll därefter.
I den här artikeln visar jag dig hur du hittar Geolocation med IP-adressen för en användare i PHP. Vi kommer att använda IP Geolocation API-tjänsten som är helt gratis.
Få Geolocation med IP-adress
I PHP kan vi använda tjänsten "IP Geolocation API" via cURL och Guzzle. Båda är populära att ringa externa API-tjänster och få svaret ur det. Beroende på ditt projekts flöde kan du använda antingen cURL eller Guzzle. I båda fallen måste vi först få användarens IP-adress. Så skriv nedanstående metod som returnerar en IP-adress.
<?php
// get user's IP address
function getUserIpAddr() {
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
Använda cURL
CURL kommer som standard med PHP-installationen. Inget behov av att installera något paket separat. Du behöver bara se till att den är aktiverad på din server innan du använder den.
Genom cURL ringer vi till slutpunkten för "IP Geolocation API" som ger användarens IP-adress och skriver ut svaret.
<?php
$ip_address = getUserIpAddr();
$url = "https://api.ipgeolocationapi.com/geolocate/$ip_address";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$response = curl_exec($ch);
$arr_result = json_decode($response);
print_r($arr_result);
Du får utdata i JSON-format ungefär som nedan.
{
"continent": "Asia",
"address_format": "{{recipient}}n{{street}}n{{region}}n{{city}} {{postalcode}}n{{country}}",
"alpha2": "IN",
"alpha3": "IND",
"country_code": "91",
"international_prefix": "00",
"ioc": "IND",
"gec": "IN",
"name": "India",
"national_destination_code_lengths": [
2
],
"national_number_lengths": [
10
],
"national_prefix": "0",
"number": "356",
"region": "Asia",
"subregion": "Southern Asia",
"world_region": "APAC",
"un_locode": "IN",
"nationality": "Indian",
"postal_code": true,
"unofficial_names": [
"India",
"Indien",
"Inde",
"インド"
],
"languages_official": [
"hi",
"en"
],
"languages_spoken": [
"hi",
"en"
],
"geo": {
"latitude": 20.593684,
"latitude_dec": "23.4060115814209",
"longitude": 78.96288,
"longitude_dec": "79.45809173583984",
"max_latitude": 35.5087008,
"max_longitude": 97.3953587,
"min_latitude": 6.4626999,
"min_longitude": 68.1097,
"bounds": {
"northeast": {
"lat": 35.5087008,
"lng": 97.3953587
},
"southwest": {
"lat": 6.4626999,
"lng": 68.1097
}
}
},
"currency_code": "INR",
"start_of_week": "monday"
}
Använda Guzzle
Guzzle är en PHP HTTP-klient för att skicka HTTP-förfrågningar. Det är ett alternativ till CURL. Det ger mycket ren kod och en bättre upplevelse för utvecklare.
Först måste du installera Guzzle med Composer genom att köra kommandot:
composer require guzzlehttp/guzzle
Skriv sedan koden nedan som anropar API: et via Guzzle.
<?php
require_once "vendor/autoload.php";
use GuzzleHttpClient;
$ip_address = getUserIpAddr();
$client = new Client();
$response = $client->request('GET', 'https://api.ipgeolocationapi.com/geolocate/'.$ip_address);
if($response->getStatusCode() == 200) {
$body = $response->getBody();
$arr_body = json_decode($body);
print_r($arr_body);
}
Så här får vi Geolocation med IP-adressen i PHP. Dela dina tankar eller förslag i kommentarfältet nedan.
relaterade artiklar
- Laravel Geoip Library – Ta reda på geolokalisering med IP-adress
- Hur får jag Geolocation från IP i PHP
- Hur man använder Guzzle – En PHP HTTP-klient för att skicka HTTP-förfrågningar