首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP从IP地址获取城市/州

问使用PHP从IP地址获取城市/州
EN

Stack Overflow用户
提问于 2015-05-26 22:48:43
回答 3查看 12.6K关注 0票数 2

我正在做一个客户项目,他需要通过获取用户的ip地址来获取用户的城市/州。

1)他购买了maxmind GeoIP2 Precision,但不知道如何在php中实现代码。文档说明了下载composer.exe的一些说明,当我下载它时,它要求我下载php.exe,然后在下载php.exe之后,我尝试安装composer.exe,然后它尝试安装composer.phar,并显示以下错误

“计算机上的某些设置使Composer无法正常工作。请确保解决下面列出的问题,然后重新运行此脚本:

缺少openssl扩展,这意味着不可能进行安全的HTTPS传输。如果可能,您应该启用它或使用-- with -openssl重新编译php。“

请建议我使用PHP从IP地址获取城市/州的最简单方法。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-26 23:37:32

此接口将获取您的位置详细信息。尝尝这个

代码语言:javascript
复制
    <?php
    $ip = '168.192.0.1'; // your ip address here
    $query = @unserialize(file_get_contents('http://ip-api.com/php/'.$ip));
    if($query && $query['status'] == 'success')
    {
        echo 'Your City is ' . $query['city'];
        echo '<br />';
        echo 'Your State is ' . $query['region'];
        echo '<br />';
        echo 'Your Zipcode is ' . $query['zip'];
        echo '<br />';
        echo 'Your Coordinates are ' . $query['lat'] . ', ' . $query['lon'];
    }
    ?>

以下是您可以使用的输出。使用密钥调用它们;

代码语言:javascript
复制
    <?php
    array (
      'status' => 'success',
      'country' => 'COUNTRY',
      'countryCode' => 'COUNTRY CODE',
      'region' => 'REGION CODE',
      'regionName' => 'REGION NAME',
      'city' => 'CITY',
      'zip' => 'ZIP CODE',
      'lat' => 'LATITUDE',
      'lon' => 'LONGITUDE',
      'timezone' => 'TIME ZONE',
      'isp' => 'ISP NAME',
      'org' => 'ORGANIZATION NAME',
      'as' => 'AS NUMBER / NAME',
      'query' => 'IP ADDRESS USED FOR QUERY',
    );
    ?>

这对于移动端来说是不可靠的。如果你在手机上,你可以使用下面的javascript

代码语言:javascript
复制
    <script>
    var x = document.getElementById("demo");
    function getLocation() {
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(showPosition);
        } else {
            x.innerHTML = "Geolocation is not supported by this browser.";
        }
    }
    function showPosition(position) {
        x.innerHTML = "Latitude: " + position.coords.latitude + 
        "<br>Longitude: " + position.coords.longitude; 
    }
    </script>

这将使用内置在设备中的gps并获得坐标。然后,您可以与充满线的数据库进行交叉参考。(这是一种选择,这就是我要做的)。

如果你进行搜索,你可以在网上找到一个城市的lng数据库,如果这就是你为移动设备选择的。

票数 15
EN

Stack Overflow用户

发布于 2019-04-26 23:38:03

也可以使用Serialized PHP endpoint,因为JSON已被弃用。

不推荐使用JSON。现在几乎所有的PHP站点都支持json_decode(),而且比unserialize()更快。

代码语言:javascript
复制
function get_ip_detail($ip){
   $ip_response = file_get_contents('http://ip-api.com/json/'.$ip);
   $ip_array=json_decode($ip_response);
   return  $ip_array;
 }

 $user_ip=$_SERVER['REMOTE_ADDR'];
 $ip_array= get_ip_detail($user_ip);
 echo $country_name=$ip_array->country; 
 echo $city=$ip_array->city;
票数 1
EN

Stack Overflow用户

发布于 2020-11-13 16:34:50

无需为API付费,也无需受到荒谬的速率限制的约束。https://www.php.net/manual/en/book.geoip.php

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30461917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档