it-swarm.com.de

Land der IP-Adresse mit erhalten PHP

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?

88
Tristan

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.

86
sprain

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 .

53
Ben Dowling

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
");
25
quano

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;
9
channasmcs

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.

6
Francis

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. 

5
ivan.mylyanyk
$country_code = trim(file_get_contents("http://ipinfo.io/{$ip_address}/country"))

wird Ihnen den Ländercode geben.

4
Mohammad Anini

Sehen Sie sich die GeoIP-Funktionen unter "Weitere grundlegende Erweiterungen" an. http://php.net/manual/de/book.geoip.php

4
John Franklin

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 .

1
ttarik

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
1
che-azeh

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
}
1

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.

1
nekudo

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
}
1
Webby

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

0

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.

0
Jonathan

Verwenden Sie das Widget www.feedsalive.com , um auch die Länderinformationen und Informationen zur letzten Seite zu erhalten.

0
Sha

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>";

?>