Знайдіть геолокацію за допомогою IP-адреси безкоштовно в PHP
Пошук геолокації та інформації про країну користувача необхідний для більшості веб-сайтів. Ймовірно, вам потрібно показувати різний вміст залежно від країни користувача, показувати різні ціни відповідно до валютних кодів країни тощо. У цих сценаріях вам потрібно знайти геолокацію користувача та відповідно обслуговувати вміст.
У цій статті я покажу вам, як знайти геолокацію за допомогою IP-адреси користувача в PHP. Ми збираємось використовувати послугу IP Geolocation API, яка є абсолютно безкоштовною.
Отримати геолокацію за допомогою IP-адреси
У PHP ми можемо скористатися послугою «API геолокації IP» через cURL та Guzzle. Обидва популярні, коли телефонують зовнішні служби API і отримують відповідь від них. Залежно від потоку вашого проекту ви можете використовувати cURL або Guzzle. В обох випадках нам спочатку потрібно отримати IP-адресу користувача. Отже, напишіть метод нижче, який поверне IP-адресу.
<?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;
}
Використання cURL
CURL за замовчуванням поставляється з установкою PHP. Не потрібно встановлювати будь-який пакет окремо. Вам просто потрібно переконатися, що це увімкнено на вашому сервері, перш ніж використовувати його.
Через cURL ми надішлемо виклик кінцевій точці «API геолокації IP», надаючи IP-адресу користувача та надрукуємо відповідь.
<?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);
Ви отримаєте результат у форматі JSON приблизно так, як показано нижче.
{
"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"
}
Використання Guzzle
Guzzle – PHP-HTTP-клієнт для надсилання HTTP-запитів. Це альтернатива cURL. Він надає набагато чистий код і кращий досвід для розробників.
Спочатку вам потрібно встановити Guzzle за допомогою Composer, виконавши команду:
composer require guzzlehttp/guzzle
Далі напишіть код, який викликає API через 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);
}
Ось як ми отримуємо геолокацію за допомогою IP-адреси в PHP. Будь ласка, поділіться своїми думками чи пропозиціями в розділі коментарів нижче.
Пов’язані статті
- Бібліотека Laravel Geoip – дізнайтеся про геолокацію за допомогою IP-адреси
- Як отримати геолокацію з IP у PHP
- Як використовувати Guzzle – PHP-клієнт HTTP для надсилання запитів HTTP