92

理想的には、任意の Web ブラウザーから照会できる PHP スクリプトをまとめようとしており、PHP スクリプトにアクセスした IP アドレスの国を返します。

これは可能ですか、それともより良い解決策がありますか?

4

17 に答える 17

88

次のような、無料で簡単に使用できる API があります。

どちらが最も信頼できるように見えるかはあなた次第です:)

それ以外の場合は、サーバー上のローカル データベースに基づくスクリプトがあります。ただし、データベース データは定期的に更新する必要があります。これをチェックしてください:

チッ!

編集: もちろん、プロジェクトによっては、HTML5 の場所の機能を見たいと思うかもしれません。Internet Explorer ではまだ使用できません (IE9 でサポートされる予定ですが、まだ長い道のりです) が、視聴者が主にモバイル デバイスを使用している場合、または Safari/Firefox を使用している場合は、確認する価値があります。

座標を取得したら、それらを国コードにリバース ジオコーディングできます。ここでも、次のような API があります。

更新、2013 年 4 月
本日は、 Geocoderを使用することをお勧めします。これは、IP アドレスや住所データのジオコーディングを非常に簡単にする PHP ライブラリです。

***更新、2016 年 9 月
Google のプライバシー ポリシーが変更されたため、サーバーに HTTPPS 証明書がない場合、またはユーザーが自分の場所を確認することを許可していない場合、HTML5 Geolocation API を使用できません。これで、ユーザーの IP を使用して PHP にチェックインしたり、HTTPS 証明書を取得したりできます。

于 2010-09-06T08:47:37.177 に答える
56

これを行うさまざまな Web API があります。私のサービスhttp://ipinfo.ioを使用した例を次に示します。

$ip = $_SERVER['REMOTE_ADDR'];
$details = json_decode(file_get_contents("http://ipinfo.io/{$ip}"));
echo $details->country; // -> "US"

Web API は迅速かつ簡単なソリューションですが、多くのルックアップを行う必要がある場合は、自分のマシンに IP -> 国データベースを用意することをお勧めします。MaxMind は、GeoIPを含むさまざまな PHP ライブラリで使用できる無料のデータベースを提供しています。

于 2013-07-12T06:00:58.267 に答える
26

MaxMind から IP テーブルをダウンロードできます。

http://www.maxmind.com/app/geolite

CSV をデータベースにインポートします (必ず ip_long_from + ip_long_to のインデックスを作成してください)。次に、次のように簡単に実行できます。

$iplong = ip2long($_SERVER['REMOTE_ADDR']);

// should use mysqli with prepared statements etc, but just an example
mysql_query("
    SELECT country
    FROM ip_table
    WHERE $iplong BETWEEN ip_long_from AND ip_long_to
    LIMIT 1
");
于 2012-05-21T07:55:19.963 に答える
10

http://www.geoplugin.net/json.gpを使用した例を次に示します。

$ip = $_SERVER['REMOTE_ADDR'];
$details = json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip={$ip}"));
echo $details;
于 2014-11-27T08:09:12.567 に答える
5

「その他の基本的な拡張機能」の下にある GeoIP 機能を見てください。 http://php.net/manual/en/book.geoip.php

于 2010-09-06T08:32:58.943 に答える
5
$country_code = trim(file_get_contents("http://ipinfo.io/{$ip_address}/country"))

国コードを取得します。

于 2015-07-20T00:23:16.260 に答える
5

多くの回答があるようですが、誰もhttps://freegeoip.net/に言及していません

まで許可されてい15,000 queries per hourます。ほとんどの場合、それで十分だと思います。それ以外の場合は、MaxMind GeoIPのローカル データベースの使用を検討する必要があります。

Freegeoip はオープンソースであり、 githubでソースを見つけてローカルにデプロイし、クエリの制限を取り除くことができます。

また、サービスは緯度/経度/タイムゾーンおよびその他の便利なものを提供します。

于 2015-07-14T15:16:32.490 に答える
2

可能であれば、 PHP の GeoIP 拡張機能をインストールして使用します。debian lenny の場合:

sudo wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
sudo gunzip GeoLiteCity.dat.gz
sudo mkdir -v /usr/share/GeoIP
sudo mv -v GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat

sudo apt-get install php5-geoip
# or sudo apt-get install php-geoip for PHP7

次に、PHP で試してみます。

$ip = $_SERVER['REMOTE_ADDR'];
$country = geoip_country_name_by_name($ip);
echo 'The current user is located in: ' . $country;

戻り値:

The current user is located in: Cameroon
于 2016-10-06T17:29:28.420 に答える
1

パフォーマンスを向上させ、ウェブサイトから外部サービスを要求しないために、適切で更新されたデータベースが必要な場合は、更新された正確なデータベースをダウンロードするのに適した場所がここにあります。

私の経験では、他のほとんどのデータベース/APIが私の場所を含めたり報告したりできなかった私のIPの都市や国の場所を含めてもうまく機能していたので、このデータベースに誘導したこのサービスを除いて、これをお勧めします.
(私のIPロケーションは、テスト時に「イラン」の「ラシュト」市からのもので、IPは次のとおりでした:に2.187.21.235等しい45815275

したがって、どちらのサービスがより正確かわからない場合は、次のサービスを使用することをお勧めします。

データベース: http://lite.ip2location.com/databases

API サービス: http://ipinfodb.com/ip_location_api.php

于 2015-06-09T14:35:45.363 に答える
1

このブログ記事はとても役に立ちました。それは私の日を救った。 http://www.techsirius.com/2014/05/simple-geo-tracking-system.html

基本的に、IP データベース テーブルをインストールしてから、場所の IP に対して mysql クエリを実行する必要があります。

<?php
include 'config.php';
mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) OR die(mysql_error());
mysql_select_db(DB_NAME) OR die(mysql_error());
$ip =  $_SERVER['REMOTE_ADDR'];
$long = sprintf('%u', ip2long($ip));
$sql = "SELECT * FROM `geo_ips` WHERE '$long' BETWEEN `ip_start` AND `ip_end`";
$result = mysql_query($sql) OR die(mysql_error());
$ip_detail = mysql_fetch_assoc($result);
if($ip_detail){
    echo $ip_detail['country']."', '".$ip_detail['state']."', '".$ip_detail['city'];
}
else{
    //Something wrong with IP
}
于 2014-06-05T09:53:02.047 に答える
1

https://www.geoip-db.comのサービスを試すことができます。JSON または JSONP コールバック ソリューションを提供します。

<?php

    $json = file_get_contents("https://www.geoip-db.com/json");
    $data = json_decode($json);

    print $data->country_code . "<br>";
    print $data->country_name . "<br>";
    print $data->state . "<br>";
    print $data->city . "<br>";
    print $data->postal . "<br>";
    print $data->latitude . "<br>";
    print $data->longitude . "<br>";
    print $data->IPv4 . "<br>";

?>
于 2016-10-13T14:46:42.120 に答える
0

ウィジェットwww.feedsalive.comを使用して、国情報と最後のページ情報も取得します。

于 2012-06-07T17:22:51.957 に答える