【问题标题】:How to find country using IP address in PHP? [duplicate]如何在 PHP 中使用 IP 地址查找国家/地区? [复制]
【发布时间】:2014-03-19 15:21:44
【问题描述】:

我有这个国家的 IP 范围。我正在检查此范围内的用户 IP 地址,如果为真,那么他能够看到该站点,否则他不会。 我使用了以下代码,

$ip = $_SERVER['REMOTE_ADDR'];
   if(ip2long($ip) >= $ipstart && ip2long($ip) <= $ipend){
        return true;
    } 

我的问题是,如果有人来自不同的国家,假设 ABC 带着他的笔记本电脑/笔记本到另一个国家假设 XYZ,那么 上面的代码可以工作吗? 在同一台笔记本电脑上。

上面的 ipv4 和 ipv6 场景怎么可能?

[编辑]

$_SERVER['REMOTE_ADDR']取哪个IP地址,是机器IP还是连接IP,这样我们才能知道他现在在这个国家?

谢谢

【问题讨论】:

  • 您需要一个第三方 API 来查找 IP 国家/地区表
  • 使用这个 $countryName = geoip_country_name_by_name($_SERVER['REMOTE_ADDR']); PHP构建的查找国家名称的方法
  • IPLocate.io 提供免费 API:iplocate.io/api/lookup/8.8.8.8 - PHP 示例:$result = json_decode(file_get_contents('https://www.iplocate.io/api/lookup/8.8.8.8')); echo $result-&gt;country; - 免责声明:我运行此服务。

标签: php ip


【解决方案1】:

使用此 API http://ipinfo.io

function ip_details($IPaddress) 
    {
        $json       = file_get_contents("http://ipinfo.io/{$IPaddress}");
        $details    = json_decode($json);
        return $details;
    }

    $IPaddress  =   $_SERVER['REMOTE_ADDR'];

    $details    =   ip_details("$IPaddress");

    //echo $details->city;   #Tamilnadu  
    //echo $details->country;  
    //echo $details->org;      
    //echo $details->hostname; 

【讨论】:

    【解决方案2】:

    Php 没有这个功能。您应该构建一个数据库或只使用外部 api 来找出它。

    http://ip-api.com 这是一个很好的/免费的。 只需解析来自那个的响应。

    【讨论】:

      【解决方案3】:

      看到这个link

      你可以使用这个函数从ip中找到国家名称,

      function getLocationInfoByIp($ip_addr)
      {
          $return_data  = array('country'=>'', 'city'=>'');
          $ip_data = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=".$ip_addr));
          if($ip_data && $ip_data->geoplugin_countryName != null)
          {
              $return_data['country'] = $ip_data->geoplugin_countryCode;
              $return_data['city'] = $ip_data->geoplugin_city;
          }
          return $return_data;
      }
      

      在此函数中传递 IP 地址,您将获得国家/地区信息...

      对于ip地址,您可以使用以下地址之一作为ip地址,

      $client_ip  = @$_SERVER['HTTP_CLIENT_IP'];
      $forward_ip = @$_SERVER['HTTP_X_FORWARDED_FOR'];
      $remote_ip  = @$_SERVER['REMOTE_ADDR'];
      

      希望对你有所帮助...

      【讨论】:

      • 感谢回复,请问$_SERVER['REMOTE_ADDR']取的是机器IP还是连接IP?
      • 您可以在我的答案中附加的链接中看到...
      • 我用过上面的例子,在不同的设备上看到不同的结果我很震惊,只有$_SERVER['REMOTE_ADDR'];给出了结果。对于我的台式电脑,它给出了国家 IN,在我的带有 Vodafone SIM 的手机中,它给出了 GB,而使用 Uninor SIM,它给出了我 US跨度>
      • 那是因为ip地址不同...如果您使用SIM卡,您的ip将来自任何国家...使用SIM服务存在很大问题...所以不要震惊..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      相关资源
      最近更新 更多