Получить местоположение пользователя с помощью ip используемого онлайн-сервиса с php cURL и json - PullRequest
0 голосов
/ 20 октября 2018

Сегодня у меня есть некоторый код php cURL, который должен показывать пользователю его местоположение, например: ip, страна, город, в котором он находится ... А если пользователь бот - ничего не делать.Итак, я делаю это так, но это не работает должным образом.Показывается только ip и больше ничего .. Пожалуйста, помогите .. И пусть власть будет с вами .. Спасибо всем за помощь.

<?php 
$ip = $_SERVER['REMOTE_ADDR'];
$apiurl = "https://api.2ip.ua/geo.json?ip=$ip";
//--
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "$apiurl");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec ($ch);
//--
curl_close ($ch);

//- **************-//
$pieces = explode('"', $contents);
$country = $pieces['7'];
$city = $pieces['11'];
$city2 = $pieces['13'];

echo "Your IP is :" . $ip  . " and country " .$country. " and city " .$city;


 ?>

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Во-первых, не используйте explode, вместо этого используйте json_decode, а затем что-то не так с SSL-сертификатом вашего API, поэтому используйте вместо него http.

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$apiurl = "http://api.2ip.ua/geo.json?ip=";
$contents = file_get_contents($apiurl . $ip);
$json = json_decode($contents);
$country = $json->country;
$city = $json->city;
echo "Your IP is :" . $ip  . " and country " . $country . " and city " . $city;
0 голосов
/ 20 октября 2018

Не используйте разнесение !, ответ API - JSON, вместо этого вы должны сделать это:

$data = json_decode($contents, true);
$country = $data['country'];
$city = $data['city'];

и так далее для любого другого поля, которое вам нужно.

Кстати, вы также можете улучшить обнаружение IP-адресов с помощью этого кода, который поддерживает множественное обнаружение с поддержкой ipv4 и ipv6

if (isset($_SERVER['REMOTE_HOST'])) {
        $ip = $_SERVER['REMOTE_HOST'];
    } elseif (isset($_SERVER['HOST'])) {
        $ip = $_SERVER['HOST'];
    } elseif (isset($_SERVER['REMOTE_ADDR'])) {
        $ip = $_SERVER['REMOTE_ADDR'];
    } else {
        $host = '';
    }
    $ip = str_replace("::ffff:","",$ip);//::ffff:127.127.127.127 en caso de jugo ipv6

С уважением и голосовать

...