PHPでユーザーのIPアドレスから場所の詳細を取得することは可能ですか?
助言がありますか ??
ありがとう
$ip = '98.229.152.237';
$xml = simplexml_load_file("http://ipinfodb.com/ip_query.php?ip=$ip");
print_r($xml);
出力:
SimpleXMLElement Object
(
[Ip] => 98.229.152.237
[Status] => OK
[CountryCode] => US
[CountryName] => United States
[RegionCode] => 33
[RegionName] => New Hampshire
[City] => Manchester
[ZipPostalCode] => 03103
[Latitude] => 42.9403
[Longitude] => -71.4435
[Timezone] => -5
[Gmtoffset] => -5
[Dstoffset] => -4
)
あなたはGeoIPサービスのいくつかの種類を使用する必要があります
私がグーグルで見つけた1つの無料サービス:geoplugin。彼らは彼らのサービスを使用するためにsnippletsをphpします:geoplugin / php
maxmindデータベースとGeoIPPECL拡張機能を確認できます。
私の場合 :
pecl install geoip
「 」で拡張機能をインストールしました/usr/share/GeoIP/GeoIPCity.dat
ので、PECL拡張機能によって検出されます。PEAR::Net_GeoIP
PECL拡張機能をインストールできない場合は、役立つPEARパッケージ()も必要であることに注意してください。
これらの両方をインストールしたら、次の種類のコードを使用できます。
$ip = '82.229.x.y'; // replace with your IP address
var_dump(geoip_record_by_name($ip));
そして、あなたはこの種の出力を得るでしょう:
array
'continent_code' => string 'EU' (length=2)
'country_code' => string 'FR' (length=2)
'country_code3' => string 'FRA' (length=3)
'country_name' => string 'France' (length=6)
'region' => string 'B9' (length=2)
'city' => string 'Lyon' (length=4)
'postal_code' => string '' (length=0)
'latitude' => float 45.75
'longitude' => float 4.84999990463
'dma_code' => int 0
'area_code' => int 0
私の場合、これは真実です。私は確かにフランスのリヨン市にいます。
PEARGeoIPライブラリを確認してください。
最初の質問は、多くの人にとって依然として重要です。現在2016年後半)。
GEO の位置特定に関する長年の経験からの私の答えは次のとおりです...
「国」を超える場所の詳細の実際のレポートは信頼できません。すべての情報は IP# ISP 登録から収集され、定期的に更新され、主要なデータ サプライヤーによって渡される関連情報です。IP# がドロップまたは購入されると、サプライヤーは関連するビジネス (つまり ISP) の登録/変更に関する詳細を取得する必要があります。ほとんどの数値は「ブロック」で取得されますが、必ずしもすべてが同じサーバーに関連しているわけではありません。
*一般に情報を提供する小規模な私設ウェブサイトの多く(ほとんどではないにしても)は、「Maxmind」無料データベースを使用し、(不適切に)それを一般に公開しています。Maxmind の警告をお読みください。小規模なサイトには、機関の登録を定期的に更新するためのリソースがありません。
無料の maxmind および「ip2location」DB は、有料データベースの小さなサブセットです。欠けているものの説明については、警告を参照してください。
ブロックで購入された多くの IP# は任意の数のサーバーで共有され、これが情報のあいまいさにつながります。ISP へのワイヤレス ネットワーク接続を使用する場合、おそらく安定した有線 ADSL/ケーブル/何とか接続とは対照的に、ISP ネットワーク サーバー (中継) が特に広範囲に配置されるため、エラーa は非常に驚くべきものになる可能性があります。ほとんどの場合、セッション間で非静的に変更され、各セッション中に変更されることもあります。
例として、ISP 接続にローミング ワイヤレス ラップトップ ドングルを使用している場合、私は別の州にいるとよく言われます。実際の場所から数百から数千 km 離れた場所 (ここではオーストラリア) にいる可能性があります。
あなたは... PHPでできますか?
主要な DB サプライヤー (ip2location.com など) を使用すると、必要な情報を取得するために使用できるサーバー側のスクリプトにアクセスできます。そして、信頼性の低い無料の DB ではなく、ip2location の DB1 を使用して、Perl と PHP の両方を介してやりたいことを実行できる訪問者「国」のみを取得します。
また、使用上の注意に従って、バイナリデータベースが更新された直後に毎月自動ダウンロードして解凍します。明らかに、自分のサイトからルックアップにアクセスすることで、リモートでのオンデマンドの取得と処理の問題が解決されます。
私の要件では、ip2location FULL db は年間 Maxmind よりもかなり安かったです。*ただし、Maxmind FREE DB は ip2location FREE DB よりも広範です。
訪問者に追加の住所や州の詳細などを取得しようとするときは、訪問者が修正できるように表示されることを強くお勧めします。彼らが欲求不満のままにならないように。
よろしく。