使用 PHP 从 IP 地址获取城市/状态

Posted

技术标签:

【中文标题】使用 PHP 从 IP 地址获取城市/状态【英文标题】:getCity/state from IP address using PHP 【发布时间】:2015-05-26 14:48:43 【问题描述】:

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

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

“您机器上的某些设置导致 Composer 无法正常工作。请确保您修复了下面列出的问题并再次运行此脚本:

缺少 openssl 扩展,这意味着安全 HTTPS 传输是不可能的。如果可能,您应该启用它或使用 --with-openssl "

重新编译 php

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

谢谢

【问题讨论】:

在linux环境下使用php5、php5-geoip。如果你有linux服务器,你可以在短时间内解决这个任务 是的,它托管在 linux 服务器上,请进一步告诉我需要做什么.. 你用的是那个linux?乌本图?仙人掌?红色的帽子? Debian? 如果您运行的是 unix,您需要使用httpd 作为网络服务器,并带有php 插件。上述.exe 文件仅适用于windows。 【参考方案1】:

此 API 将获取您的位置详细信息。试试这个

    <?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'];
    
    ?>

以下是您可以使用的输出。使用密钥呼叫他们;

    <?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

    <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 数据库。

【讨论】:

哇,你太棒了,谢谢..它真的有效,它适用于世界各地的城市吗?? 是的,我相信它应该。但是,如果您使用移动设备,它将不可靠。如果您使用移动设备,还有其他方法 哦,真的,我也会为我未来的项目保存这个代码,你能告诉我手机也可以吗.. 我更新了答案,如果您愿意,可以为您提供其他探索。移动设备的一个可能选项。 另外,如果您对我的回答满意,请选择正确:)【参考方案2】:

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

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

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;

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于使用 PHP 从 IP 地址获取城市/状态的主要内容,如果未能解决你的问题,请参考以下文章

如何从 PHP 输入表单中获取城市的谷歌地图?

PHP 根据IP地址获取所在城市

获取公网ip,获取用户城市地址

PHP代码获取客户端IP地址经纬度及所在城市

无法从地理位置获取城市名称

PHP 根据IP获取地区查询数据库内容