Idealerweise versuche ich, ein PHP -Skript zusammenzustellen, das ich von einem beliebigen Webbrowser aus abfragen kann. Es gibt das Land der IP-Adresse zurück, die auf das PHP -Skript zugegriffen hat.
Ist das möglich oder gibt es eine bessere Lösung?
Es gibt kostenlose, einfache APIs, die Sie verwenden können, wie zum Beispiel:
Welches aussieht, das am vertrauenswürdigsten ist, liegt an Ihnen :)
Ansonsten gibt es Skripts, die auf lokalen Datenbanken auf Ihrem Server basieren. Die Datenbankdaten müssen jedoch regelmäßig aktualisiert werden. Schauen Sie sich dieses an:
HTH!
Edit: Abhängig von Ihrem Projekt möchten Sie vielleicht HTML5 Location features betrachten. Sie können sie noch nicht mit dem Internet Explorer verwenden (der IE9 wird es noch lange nicht unterstützen), aber falls Ihr Publikum hauptsächlich auf mobilen Geräten oder Safari/Firefox läuft, lohnt es sich unbedingt, es sich anzusehen!
Sobald Sie die Koordinaten haben, können Sie den Geocode in einen Ländercode umkehren. Wieder gibt es APIs wie diese:
Update, April 2013
Heute würde ich empfehlen, Geocoder zu verwenden, eine PHP - Bibliothek, die es sehr einfach macht, IP-Adressen sowie Postadressdaten zu geokodieren.
*** Update, September 2016
Da sich die Datenschutzrichtlinie von Google geändert hat, können Sie die HTML5-Geolocation-API nicht verwenden, wenn Ihr Server kein HTPPS-Zertifikat besitzt oder der Benutzer die Überprüfung seines Standorts nicht zulässt. Jetzt können Sie die IP des Benutzers verwenden und in PHP einchecken oder ein HTTPS-Zertifikat anfordern.
Es gibt verschiedene Web-APIs, die dies für Sie tun. Hier ist ein Beispiel, das meinen Dienst verwendet, http://ipinfo.io :
$ip = $_SERVER['REMOTE_ADDR'];
$details = json_decode(file_get_contents("http://ipinfo.io/{$ip}"));
echo $details->country; // -> "US"
Web-APIs sind eine schnelle und einfache Lösung von Nizza. Wenn Sie jedoch viel nachschlagen müssen, ist es eine bessere Lösung, eine IP-> Länderdatenbank auf Ihrem eigenen Computer zu installieren. MaxMind bietet eine freie Datenbank an, die Sie mit verschiedenen PHP - Bibliotheken verwenden können, einschließlich GeoIP .
Sie können ip-tables von MaxMind herunterladen:
http://www.maxmind.com/app/geolite
Importieren Sie die CSV-Datei in Ihre Datenbank (stellen Sie sicher, dass Sie einen Index für ip_long_from + ip_long_to erstellen). Dann können Sie einfach folgendes tun:
$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
");
Hier ist ein Beispiel mit 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;
Sie können das Land von der IP-Adresse mit dieser location API erhalten.
Code
echo file_get_contents('https://ipapi.co/8.8.8.8/country/');
Antwort
US
Hier ist eine Geige . Die Antwort lautet text
, wenn Sie ein bestimmtes Feld abfragen, z. country
hier. Keine Dekodierung erforderlich, einfach in Ihren Code einbinden.
P.S. Wenn Sie alle Felder wünschen, z. https://ipapi.co/8.8.8.8/json/
, die Antwort ist JSON
.
Ich sehe, dass es viele Antworten gibt, aber keiner von ihnen erwähnt https://freegeoip.net/
Sie dürfen bis zu 15,000 queries per hour
. Ich denke, das reicht in den meisten Fällen. Andernfalls sollten Sie über lokale Datenbanken von MaxMind GeoIP nachdenken.
Freegeoip ist Open-Source und Sie können Quellen in github finden, lokal bereitstellen und die Abfragegrenzen entfernen.
Außerdem bietet der Dienst Breitengrad/Längengrad/Zeitzone und andere nützliche Dinge an.
$country_code = trim(file_get_contents("http://ipinfo.io/{$ip_address}/country"))
wird Ihnen den Ländercode geben.
Sehen Sie sich die GeoIP-Funktionen unter "Weitere grundlegende Erweiterungen" an. http://php.net/manual/de/book.geoip.php
Ich führe den Dienst unter IPLocate.io aus, an den Sie sich mit einem einfachen Anruf kostenlos anschließen können:
<?php
$res = file_get_contents('https://www.iplocate.io/api/lookup/8.8.8.8');
$res = json_decode($res);
echo $res->country; // United States
echo $res->continent; // North America
echo $res->latitude; // 37.751
echo $res->longitude; // -97.822
var_dump($res);
Das $res
-Objekt enthält Ihre Geolocation-Felder wie country
, city
usw.
Weitere Informationen finden Sie unter docs .
Installieren und verwenden Sie PHP's GeoIP-Erweiterung wenn Sie können. Auf 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
und probiere es dann in PHP:
$ip = $_SERVER['REMOTE_ADDR'];
$country = geoip_country_name_by_name($ip);
echo 'The current user is located in: ' . $country;
kehrt zurück:
The current user is located in: Cameroon
Sie können https://ip-api.io/ verwenden, um den Ländernamen, den Namen der Stadt, den Breitengrad und den Längengrad zu erhalten. Es unterstützt IPv6.
Als Bonus wird angezeigt, ob die IP-Adresse ein Tor-Knoten, ein öffentlicher Proxy oder ein Spammer ist.
PHP-Code:
$result = json_decode(file_get_contents('http://ip-api.io/json/64.30.228.118'));
var_dump($result);
Ausgabe:
{
"ip": "64.30.228.118",
"country_code": "US",
"country_name": "United States",
"region_code": "FL",
"region_name": "Florida",
"city": "Fort Lauderdale",
"Zip_code": "33309",
"time_zone": "America/New_York",
"latitude": 26.1882,
"longitude": -80.1711,
"metro_code": 528,
"suspicious_factors": {
"is_proxy": false,
"is_tor_node": false,
"is_spam": false,
"is_suspicious": false
}
Hier ist eine weitere kostenlose API für Geolocation-Anfragen: http://geoip.nekudo.com
Die Antworten sind im JSON-Format. Außerdem ist der API-Quellcode auf github verfügbar, falls Sie Ihre eigene API einrichten müssen.
Ich fand diesen Blogbeitrag sehr hilfreich. Es hat meinen Tag gerettet. http://www.techsirius.com/2014/05/simple-geo-tracking-system.html
Grundsätzlich müssen Sie die IP-Datenbanktabelle installieren und anschließend die Mysql-Abfrage für die IP-Adresse durchführen.
<?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
}
Wenn Sie eine gute und aktualisierte Datenbank benötigen, um mehr Leistung zu erzielen und keine externen Dienste von Ihrer Website anzufordern, finden Sie in hier aktualisierte Datenbanken.
Ich empfehle das, weil es meiner Erfahrung nach hervorragend funktioniert hat, auch wenn es den Ort und das Land meines IP-Standorts angibt, wobei die meisten anderen Datenbanken/APIs meinen Standort nicht enthalten/melden, mit Ausnahme von diesem Service , der mich zu dieser Datenbank geleitet hat.
(Meine IP-Adresse war von "Rasht" City in "Iran", als ich testete, und die IP war: 2.187.21.235
gleich 45815275
)
Daher empfehle ich die Verwendung dieser Dienste, wenn Sie sich nicht sicher sind, welcher Dienst genauer ist:
Datenbank: http://lite.ip2location.com/databases
API-Dienst: http://ipinfodb.com/ip_location_api.php
Ipdata.co bietet dazu eine skalierbare API. Mit 10 globalen Endpunkten, von denen jeder täglich> 800 M Anfragen verarbeiten kann!
Darüber hinaus erhalten Sie von jeder IPv4- oder IPv6-Adresse die Angaben zu Organisation, Währung, Zeitzone, Anrufcode, Flag und Tor-Exit-Knoten.
In php
php > $ip = '8.8.8.8';
php > $details = json_decode(file_get_contents("https://api.ipdata.co/{$ip}"));
php > echo $details->region;
California
php > echo $details->city;
Mountain View
php > echo $details->country_name;
United States
php > echo $details->location;
37.405991,-122.078514
Haftungsausschluss
Ich habe diesen Service aufgebaut.
Verwenden Sie das Widget www.feedsalive.com , um auch die Länderinformationen und Informationen zur letzten Seite zu erhalten.
Sie können die Dienste von https://www.geoip-db.com ausprobieren. Sie bieten eine JSON- oder JSONP-Callback-Lösung.
<?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>";
?>