web-dev-qa-db-ja.com

ユーザーの現在位置を取得する

IPに基づいてユーザーの現在の場所を特定するにはどうすればよいでしょう(このように機能すると思います)。

34
Jacek Francuz
<?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"];
?>
31
Hamza

編集済み

freegeoip.netipinfo.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'];
?>
22
NaveenDA

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);
9
Bedh
<?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>";
}
?>

このソースを使用してこのコードを試してください。できます!

9
Adnan Rasheed

MaxMind GeoIP は良いサービスです。また、無料の都市レベルの検索サービスもあります。

4
glomad

GeoIP Country Whois Locator にある PHPClasses をご覧ください。

3
madkris24

as PHPサーバーに依存しているため、リアルタイムの場所は静的な場所のみを提供できません。phpを使用するよりも、JSに依存することを避ける方が良いです。 jsデータをphpに投稿して、サーバー上で簡単にアクセスできるようにする必要があります

2
Venkat Sai

古いfreegeoip APIは廃止され、2018年7月1日に廃止されます。

新しいAPIは https://ipstack.com からのものです。 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 .

詳細については、こちらをご覧ください:/ https://github.com/apilayer/freegeoip

0
lalithkumar

IPは非常に信頼性の低い場所を提供します。最初に場所を取得することが重要でない場合は、JSでロード時に場所をAjaxできます。 (また、ユーザーはそれにアクセスする許可を与える必要があります。)

Html5 Geolocation

0
Sam Pettersson