首页 > 解决方案 > 使用 php cURL 和 json 通过 ip 使用在线服务获取用户位置

问题描述

今天我有一些 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;


 ?>

标签: phpjsoncurllocationip

解决方案


不要使用explode!,api的答案是JSON,而是你必须这样做:

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

对于您需要的任何其他领域,依此类推。

顺便说一句,您还可以使用支持 ipv4 和 ipv6 支持的多重检测的代码改进 IP 检测

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

问候并投票


推荐阅读