【问题标题】:Get user location by ip used online service with php cURL and json使用 php cURL 和 json 通过 ip 使用在线服务获取用户位置
【发布时间】:2018-10-20 12:06:57
【问题描述】:

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


 ?>

【问题讨论】:

  • 位置不准确,获取客户端的 IP 并对照机器人的 IP 进行检查不是更有意义吗? getBotList() 返回什么?
  • @Jaquarh getBotList() 检查机器人 USER_AGENT 的 .txt 文件我需要这个将用户的所有数据写入 mySQL 库,我只想要真正的 USER_AGENT...我切断了这部分脚本.. . 对不起......我把所有不需要的东西都剪掉了
  • 那么您用来将这些信息写入数据库的代码在哪里?这不是代码编写服务。你的问题不清楚,你到底在问什么?
  • @Jaquarh...这个问题不在这种情况下.....)))我编辑代码...
  • @Jaquarh... 你看不懂不是我的错。为什么需要我的代码将数据写入数据库,如果问题是我需要将从 user_agent 接收到的数据(而不是来自数据库的数据)输出到普通页面并且用户应该看到这一点。这就是为什么我只发布了部分不起作用的代码,其他一切都正常!...我不需要您或其他任何人给我写完整的代码,如果您看不到我自己做的.. .但我不明白为什么它不起作用!!!...以及为什么您在我的问题上单击减号,而不是我的错,您无法阅读!

标签: php json curl location ip


【解决方案1】:

不要使用explode!,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

问候和投票

【讨论】:

    【解决方案2】:

    首先,不要使用explode,而是使用json_decode,然后你的API的SSL-Certificate有问题所以使用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;
    

    【讨论】:

      猜你喜欢
      • 2017-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 1970-01-01
      • 2012-11-15
      • 2018-10-09
      • 1970-01-01
      相关资源
      最近更新 更多