php 获取用户的当前位置

qyyhg6bp  于 2023-02-07  发布在  PHP
关注(0)|答案(7)|浏览(184)

我怎样才能确定一个用户的当前位置的基础上的IP地址(我猜它的工作方式)。

djmepvbi

djmepvbi1#

<?php
$user_ip = getenv('REMOTE_ADDR');
$geo = unserialize(file_get_contents("http://www.geoplugin.net/php.gp?ip=$user_ip"));
$country = $geo["geoplugin_countryName"];
$city = $geo["geoplugin_city"];
?>
bybem2ql

bybem2ql2#

    • 已编辑**

freegeoip.net更改为ipinfo.io

<?php    

function get_client_ip()
{
    $ipaddress = '';
    if (isset($_SERVER['HTTP_CLIENT_IP'])) {
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    } else if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else if (isset($_SERVER['HTTP_X_FORWARDED'])) {
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
    } else if (isset($_SERVER['HTTP_FORWARDED_FOR'])) {
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
    } else if (isset($_SERVER['HTTP_FORWARDED'])) {
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
    } else if (isset($_SERVER['REMOTE_ADDR'])) {
        $ipaddress = $_SERVER['REMOTE_ADDR'];
    } else {
        $ipaddress = 'UNKNOWN';
    }

    return $ipaddress;
}
$PublicIP = get_client_ip();
$json     = file_get_contents("http://ipinfo.io/$PublicIP/geo");
$json     = json_decode($json, true);
$country  = $json['country'];
$region   = $json['region'];
$city     = $json['city'];
?>
jchrr9hc

jchrr9hc3#

<?php
    $query = @unserialize (file_get_contents('http://ip-api.com/php/'));
    if ($query && $query['status'] == 'success') {
        echo 'Hey user from ' . $query['country'] . ', ' . $query['city'] . '!';
    }
    foreach ($query as $data) {
        echo $data . "<br>";
    }
?>

使用此源代码尝试此代码。* 它工作!

7gs2gvoe

7gs2gvoe4#

使用hostip.info服务尝试以下代码:

$country=file_get_contents('http://api.hostip.info/get_html.php?ip=');
echo $country;

// Reformat the data returned (Keep only country and country abbr.)
$only_country=explode (" ", $country);

echo "Country : ".$only_country[1]." ".substr($only_country[2],0,4);
xpszyzbs

xpszyzbs5#

由于PHP依赖于服务器,所以无法提供实时位置,只能提供静态位置,最好避免依赖JavaScript来定位,而不要使用PHP。
但是需要将JavaScript数据发布到PHP,以便服务器上的程序可以轻松地访问它。

nbewdwxp

nbewdwxp6#

IP地址提供了一个非常不可靠的位置。如果一开始并不一定要有这个位置,那么可以在加载时用JavaScript Ajax来 AJAX 这个位置。(另外,用户需要给您访问它的权限。)
HTML5 Geolocation

gdx19jrr

gdx19jrr7#

旧版freegeoip API is now deprecated将于2018年7月1日停产。
新API来自 ipstack。您必须在ipstack中创建帐户。然后您可以使用API URL中的访问密钥。

$url = "http://api.ipstack.com/122.167.180.20?access_key=ACCESS_KEY&format=1";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$response = json_decode($response);
$city  = $response->city; // You can get all the details like longitude, latitude from the '$response'.

如需了解更多信息,请访问 freegeoip(GitHub)。

相关问题