Besucher Land von ihrer IP bekommen

Ich möchte Besucher über ihre IP-Adresse erreichen … Momentan benutze ich diese ( http://api.hostip.info/country.php?ip= ……)

Hier ist mein Code:

 

Nun, es funktioniert einwandfrei, aber die Sache ist, dass der Ländercode wie US oder CA zurückgegeben wird, und nicht der ganze Ländername wie USA oder Kanada.

Gibt es eine gute Alternative zu hostip.info?

Ich weiß, dass ich nur einen Code schreiben kann, der diese zwei Buchstaben schließlich in den ganzen Ländernamen umwandelt, aber ich bin einfach zu faul, um einen Code zu schreiben, der alle Länder enthält …

PS: Aus irgendeinem Grund möchte ich keine fertige CSV-Datei oder irgendeinen Code verwenden, der diese Informationen für mich aufnimmt, etwas wie ip2country-Code und CSV.

Probieren Sie diese einfache PHP-function aus.

 < ?php function ip_info($ip = NULL, $purpose = "location", $deep_detect = TRUE) { $output = NULL; if (filter_var($ip, FILTER_VALIDATE_IP) === FALSE) { $ip = $_SERVER["REMOTE_ADDR"]; if ($deep_detect) { if (filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP)) $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; if (filter_var(@$_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP)) $ip = $_SERVER['HTTP_CLIENT_IP']; } } $purpose = str_replace(array("name", "\n", "\t", " ", "-", "_"), NULL, strtolower(trim($purpose))); $support = array("country", "countrycode", "state", "region", "city", "location", "address"); $continents = array( "AF" => "Africa", "AN" => "Antarctica", "AS" => "Asia", "EU" => "Europe", "OC" => "Australia (Oceania)", "NA" => "North America", "SA" => "South America" ); if (filter_var($ip, FILTER_VALIDATE_IP) && in_array($purpose, $support)) { $ipdat = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=" . $ip)); if (@strlen(trim($ipdat->geoplugin_countryCode)) == 2) { switch ($purpose) { case "location": $output = array( "city" => @$ipdat->geoplugin_city, "state" => @$ipdat->geoplugin_regionName, "country" => @$ipdat->geoplugin_countryName, "country_code" => @$ipdat->geoplugin_countryCode, "continent" => @$continents[strtoupper($ipdat->geoplugin_continentCode)], "continent_code" => @$ipdat->geoplugin_continentCode ); break; case "address": $address = array($ipdat->geoplugin_countryName); if (@strlen($ipdat->geoplugin_regionName) >= 1) $address[] = $ipdat->geoplugin_regionName; if (@strlen($ipdat->geoplugin_city) >= 1) $address[] = $ipdat->geoplugin_city; $output = implode(", ", array_reverse($address)); break; case "city": $output = @$ipdat->geoplugin_city; break; case "state": $output = @$ipdat->geoplugin_regionName; break; case "region": $output = @$ipdat->geoplugin_regionName; break; case "country": $output = @$ipdat->geoplugin_countryName; break; case "countrycode": $output = @$ipdat->geoplugin_countryCode; break; } } } return $output; } ?> 

Wie benutzt man:

Beispiel1: Details zur Besucher-IP-Adresse abrufen

 < ?php echo ip_info("Visitor", "Country"); // India echo ip_info("Visitor", "Country Code"); // IN echo ip_info("Visitor", "State"); // Andhra Pradesh echo ip_info("Visitor", "City"); // Proddatur echo ip_info("Visitor", "Address"); // Proddatur, Andhra Pradesh, India print_r(ip_info("Visitor", "Location")); // Array ( [city] => Proddatur [state] => Andhra Pradesh [country] => India [country_code] => IN [continent] => Asia [continent_code] => AS ) ?> 

Beispiel 2: Details zu einer beliebigen IP-Adresse abrufen [Unterstützung IPV4 & IPV6]

 < ?php echo ip_info("173.252.110.27", "Country"); // United States echo ip_info("173.252.110.27", "Country Code"); // US echo ip_info("173.252.110.27", "State"); // California echo ip_info("173.252.110.27", "City"); // Menlo Park echo ip_info("173.252.110.27", "Address"); // Menlo Park, California, United States print_r(ip_info("173.252.110.27", "Location")); // Array ( [city] => Menlo Park [state] => California [country] => United States [country_code] => US [continent] => North America [continent_code] => NA ) ?> 

Sie können eine einfache API von http://www.geoplugin.net/ verwenden

 $xml = simplexml_load_file("http://www.geoplugin.net/xml.gp?ip=".getRealIpAddr()); echo $xml->geoplugin_countryName ; echo "
"; foreach ($xml as $key => $value) { echo $key , "= " , $value , " \n" ; } echo "

";

function verwendet

 function getRealIpAddr() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) //check ip from share internet { $ip=$_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) //to check ip is pass from proxy { $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip=$_SERVER['REMOTE_ADDR']; } return $ip; } 

Ausgabe

 United States geoplugin_city= San Antonio geoplugin_region= TX geoplugin_areaCode= 210 geoplugin_dmaCode= 641 geoplugin_countryCode= US geoplugin_countryName= United States geoplugin_continentCode= NA geoplugin_latitude= 29.488899230957 geoplugin_longitude= -98.398696899414 geoplugin_regionCode= TX geoplugin_regionName= Texas geoplugin_currencyCode= USD geoplugin_currencySymbol= $ geoplugin_currencyConverter= 1 

Sie haben so viele Optionen, mit denen Sie herumspielen können

Vielen Dank

🙂

Ich habe Chandras Antwort versucht, aber meine Serverkonfiguration erlaubt es nicht, file_get_contents ()

PHP Warning: file_get_contents() URL file-access is disabled in the server configuration

Ich habe Chandras Code so modifiziert, dass er auch für solche Server mit cURL funktioniert:

 function ip_visitor_country() { $client = @$_SERVER['HTTP_CLIENT_IP']; $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; $remote = $_SERVER['REMOTE_ADDR']; $country = "Unknown"; if(filter_var($client, FILTER_VALIDATE_IP)) { $ip = $client; } elseif(filter_var($forward, FILTER_VALIDATE_IP)) { $ip = $forward; } else { $ip = $remote; } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://www.geoplugin.net/json.gp?ip=".$ip); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $ip_data_in = curl_exec($ch); // string curl_close($ch); $ip_data = json_decode($ip_data_in,true); $ip_data = str_replace('"', '"', $ip_data); // for PHP 5.2 see stackoverflow.com/questions/3110487/ if($ip_data && $ip_data['geoplugin_countryName'] != null) { $country = $ip_data['geoplugin_countryName']; } return 'IP: '.$ip.' # Country: '.$country; } echo ip_visitor_country(); // output Coutry name ?> 

Ich hoffe, das hilft 😉

Tatsächlich können Sie http://api.hostip.info/?ip=123.125.114.144 aufrufen, um die Informationen zu erhalten, die in XML präsentiert werden.

Verwenden Sie MaxMind GeoIP (oder GeoIPLite, wenn Sie nicht bereit sind zu zahlen).

 $gi = geoip_open('GeoIP.dat', GEOIP_MEMORY_CACHE); $country = geoip_country_code_by_addr($gi, $_SERVER['REMOTE_ADDR']); geoip_close($gi); 

Verwenden Sie folgende Dienste

1) http://api.hostip.info/get_html.php?ip=12.215.42.19

2)

 $json = file_get_contents('http://freegeoip.appspot.com/json/66.102.13.106'); $expression = json_decode($json); print_r($expression); 

3) http://ipinfodb.com/ip_location_api.php

Schau dir php-ip-2-country von code.google an. Die von ihnen bereitgestellte database wird täglich aktualisiert. Daher ist es nicht erforderlich, eine Verbindung zu einem externen Server für die Überprüfung herzustellen, wenn Sie Ihren eigenen SQL-Server hosten. Um den Code zu verwenden, müssten Sie nur eingeben:

 < ?php $ip = $_SERVER['REMOTE_ADDR']; if(!empty($ip)){ require('./phpip2country.class.php'); /** * Newest data (SQL) avaliable on project website * @link http://code.google.com/p/php-ip-2-country/ */ $dbConfigArray = array( 'host' => 'localhost', //example host name 'port' => 3306, //3306 -default mysql port number 'dbName' => 'ip_to_country', //example db name 'dbUserName' => 'ip_to_country', //example user name 'dbUserPassword' => 'QrDB9Y8CKMdLDH8Q', //example user password 'tableName' => 'ip_to_country', //example table name ); $phpIp2Country = new phpIp2Country($ip,$dbConfigArray); $country = $phpIp2Country->getInfo(IP_COUNTRY_NAME); echo $country; ?> 

Beispielcode (aus der Ressource)

 < ? require('phpip2country.class.php'); $dbConfigArray = array( 'host' => 'localhost', //example host name 'port' => 3306, //3306 -default mysql port number 'dbName' => 'ip_to_country', //example db name 'dbUserName' => 'ip_to_country', //example user name 'dbUserPassword' => 'QrDB9Y8CKMdLDH8Q', //example user password 'tableName' => 'ip_to_country', //example table name ); $phpIp2Country = new phpIp2Country('213.180.138.148',$dbConfigArray); print_r($phpIp2Country->getInfo(IP_INFO)); ?> 

Ausgabe

 Array ( [IP_FROM] => 3585376256 [IP_TO] => 3585384447 [REGISTRY] => RIPE [ASSIGNED] => 948758400 [CTRY] => PL [CNTRY] => POL [COUNTRY] => POLAND [IP_STR] => 213.180.138.148 [IP_VALUE] => 3585378964 [IP_FROM_STR] => 127.255.255.255 [IP_TO_STR] => 127.255.255.255 ) 

Wir können geobytes.com verwenden, um den Standort mithilfe der Benutzer-IP-Adresse abzurufen

 $user_ip = getIP(); $meta_tags = get_meta_tags('http://www.geobytes.com/IPLocator.htm?GetLocation&template=php3.txt&IPAddress=' . $user_ip); echo '
'; print_r($meta_tags);

Es wird Daten wie folgt zurückgeben

 Array( [known] => true [locationcode] => USCALANG [fips104] => US [iso2] => US [iso3] => USA [ison] => 840 [internet] => US [countryid] => 254 [country] => United States [regionid] => 126 [region] => California [regioncode] => CA [adm1code] => [cityid] => 7275 [city] => Los Angeles [latitude] => 34.0452 [longitude] => -118.2840 [timezone] => -08:00 [certainty] => 53 [mapbytesremaining] => Free ) 

function, um Benutzer-IP zu erhalten

 function getIP(){ if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){ $pattern = "/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/"; if(preg_match($pattern, $_SERVER["HTTP_X_FORWARDED_FOR"])){ $userIP = $_SERVER["HTTP_X_FORWARDED_FOR"]; }else{ $userIP = $_SERVER["REMOTE_ADDR"]; } } else{ $userIP = $_SERVER["REMOTE_ADDR"]; } return $userIP; } 

Versuchen Sie diesen einfachen Code mit einer Zeile. Sie erhalten das Land und die Stadt der Besucher von ihrer IP-Remote-Adresse.

 $tags = get_meta_tags('http://www.geobytes.com/IpLocator.htm?GetLocation&template=php3.txt&IpAddress=' . $_SERVER['REMOTE_ADDR']); echo $tags['country']; echo $tags['city']; 

Es gibt eine gut gepflegte Flat-File-Version der ip-> country-database, die von der Perl-Community bei CPAN gepflegt wird

Der Zugriff auf diese Dateien erfordert keinen Datenserver und die Daten selbst sind ungefähr 515k groß

Higemaru hat einen PHP-Wrapper geschrieben, um mit diesen Daten zu sprechen: php-ip-country-fast

Sie können einen Web-Service von http://ip-api.com verwenden
Führen Sie in Ihrem PHP-Code Folgendes aus:

 < ?php $ip = $_REQUEST['REMOTE_ADDR']; // the IP address to query $query = @unserialize(file_get_contents('http://ip-api.com/php/'.$ip)); if($query && $query['status'] == 'success') { echo 'Hello visitor from '.$query['country'].', '.$query['city'].'!'; } else { echo 'Unable to get location'; } ?> 

Die Abfrage hat viele andere Informationen:

 array ( 'status' => 'success', 'country' => 'COUNTRY', 'countryCode' => 'COUNTRY CODE', 'region' => 'REGION CODE', 'regionName' => 'REGION NAME', 'city' => 'CITY', 'zip' => ZIP CODE, 'lat' => LATITUDE, 'lon' => LONGITUDE, 'timezone' => 'TIME ZONE', 'isp' => 'ISP NAME', 'org' => 'ORGANIZATION NAME', 'as' => 'AS NUMBER / NAME', 'query' => 'IP ADDRESS USED FOR QUERY', ) 

Viele verschiedene Möglichkeiten, es zu tun …

Lösung # 1:

Ein Drittanbieter-Dienst, den Sie verwenden können, ist http://ipinfodb.com . Sie bieten Hostname, Geolocation und zusätzliche Informationen.

Registrieren Sie sich hier für einen API-Schlüssel: http://ipinfodb.com/register.php . Dadurch können Sie Ergebnisse von ihrem Server abrufen, ohne dass dies nicht funktioniert.

Kopieren Sie den folgenden PHP-Code und geben Sie ihn ein:

 $ipaddress = $_SERVER['REMOTE_ADDR']; $api_key = 'YOUR_API_KEY_HERE'; $data = file_get_contents("http://api.ipinfodb.com/v3/ip-city/?key=$api_key&ip=$ipaddress&format=json"); $data = json_decode($data); $country = $data['Country']; 

Nachteil:

Zitat von ihrer Website:

Unsere kostenlose API verwendet die Version IP2Location Lite, die eine geringere Genauigkeit bietet.

Lösung # 2:

Diese function gibt den Namen des Landes unter http://www.netip.de/ zurück.

 $ipaddress = $_SERVER['REMOTE_ADDR']; function geoCheckIP($ip) { $response=@file_get_contents('http://www.netip.de/search?query='.$ip); $patterns=array(); $patterns["country"] = '#Country: (.*?) #i'; $ipInfo=array(); foreach ($patterns as $key => $pattern) { $ipInfo[$key] = preg_match($pattern,$response,$value) && !empty($value[1]) ? $value[1] : 'not found'; } return $ipInfo; } print_r(geoCheckIP($ipaddress)); 

Ausgabe:

 Array ( [country] => DE - Germany ) // Full Country Name 

Mein Service ipdata.co liefert den Namen des Landes in 5 Sprachen! Sowie die Organisation, Währung, Zeitzone, Anrufcode, Flagge, Mobile Carrier Daten, Proxy-Daten und Tor Exit Node Status-Daten von jedem IPv4 oder IPv6-Adresse.

Diese Antwort verwendet einen Test-API-Schlüssel, der sehr begrenzt ist und nur für das Testen einiger Anrufe gedacht ist. Melden Sie sich für Ihren eigenen Free API Key an und erhalten Sie täglich bis zu 1500 Anfragen für die Entwicklung.

Es ist auch extrem skalierbar mit 10 Regionen auf der ganzen Welt, die jeweils> 10.000 Anfragen pro Sekunde verarbeiten können!

Die Optionen umfassen; Englisch (en), Deutsch (de), Japanisch (ja), Französisch (fr) und vereinfachtes Chinesisch (za-CH)

 $ip = '74.125.230.195'; $details = json_decode(file_get_contents("https://api.ipdata.co/{$ip}?api-key=test")); echo $details->country_name; //United States echo $details->city; //Mountain View $details = json_decode(file_get_contents("https://api.ipdata.co/{$ip}?api-key=test/zh-CN")); echo $details->country_name; //美国 

Nicht sicher, ob dies ein neuer Service ist, aber jetzt (2016) ist der einfachste Weg in PHP, den gephlugin php Web Service zu benutzen: http://www.geoplugin.net/php.gp :

Grundlegende Verwendung:

 // GET IP ADDRESS if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } else if (!empty($_SERVER['REMOTE_ADDR'])) { $ip = $_SERVER['REMOTE_ADDR']; } else { $ip = false; } // CALL THE WEBSERVICE $ip_info = unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip='.$ip)); 

Sie bieten auch eine fertige class: http://www.geoplugin.com/_media/webservices/geoplugin.class.php.tgz?id=webservices%3Aphp&cache=cache

Ich habe eine kurze Antwort auf diese Frage, die ich in einem Projekt verwendet habe. In meiner Antwort habe ich berücksichtigt, dass Sie Besucher IP-Adresse haben

 $ip = "202.142.178.220"; $ipdat = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=" . $ip)); //get ISO2 country code if(property_exists($ipdat, 'geoplugin_countryCode')) { echo $ipdat->geoplugin_countryCode; } //get country full name if(property_exists($ipdat, 'geoplugin_countryName')) { echo $ipdat->geoplugin_countryName; } 

Wenn es dir hilft, meine Antwort abzustimmen.

Ich benutze ipinfodb.com API und ipinfodb.com genau das, wonach du suchst.

Es ist völlig kostenlos, Sie müssen nur bei ihnen registrieren, um Ihren API-Schlüssel zu erhalten. Sie können ihre PHP-class einschließen, indem Sie von ihrer Website herunterladen, oder Sie können URL-Format verwenden, um Informationen abzurufen.

Folgendes mache ich:

Ich habe ihre PHP-class in mein Skript eingefügt und verwende den folgenden Code:

 $ipLite = new ip2location_lite; $ipLite->setKey('your_api_key'); if(!$_COOKIE["visitorCity"]){ //I am using cookie to store information $visitorCity = $ipLite->getCity($_SERVER['REMOTE_ADDR']); if ($visitorCity['statusCode'] == 'OK') { $data = base64_encode(serialize($visitorCity)); setcookie("visitorCity", $data, time()+3600*24*7); //set cookie for 1 week } } $visitorCity = unserialize(base64_decode($_COOKIE["visitorCity"])); echo $visitorCity['countryName'].' Region'.$visitorCity['regionName']; 

Das ist es.

Sie können http://ipinfo.io/ verwenden , um Details der IP-Adresse zu erhalten. Es ist einfach zu benutzen.

 < ?php function ip_details($ip) { $json = file_get_contents("http://ipinfo.io/{$ip}"); $details = json_decode($json); return $details; } $details = ip_details(YoUR IP ADDRESS); echo $details->city; echo "
".$details->country; echo "
".$details->org; echo "
".$details->hostname; / ?>

Ersetzen Sie 127.0.0.1 durch die Besucher-IP-Adresse.

 $country = geoip_country_name_by_name('127.0.0.1'); 

Installationsanweisungen sind hier , und lesen Sie dies, um zu erfahren, wie man Stadt, Staat, Land, Länge, Breitengrad, usw. erhält …

Ein einziger Liner mit einer IP-Adresse für die Länder- API

 echo file_get_contents('https://ipapi.co/8.8.8.8/country_name/'); > United States 

Beispiel:

https://ipapi.co/country_name/ – dein Land

https://ipapi.co/8.8.8.8/country_name/ – Land für IP 8.8.8.8

Die Benutzerland-API hat genau das, was Sie brauchen. Hier ist ein Beispielcode mit file_get_contents () wie Sie es ursprünglich getan haben:

 $result = json_decode(file_get_contents('http://usercountry.com/v1.0/json/'.$cip), true); $result['country']['name']; // this contains what you need 

Sie können Besucher Land und Stadt mit ipstack geo API bekommen. Sie müssen Ihre eigene ipstack API und dann den folgenden Code verwenden:

 < ?php $ip = $_SERVER['REMOTE_ADDR']; $api_key = "YOUR_API_KEY"; $freegeoipjson = file_get_contents("http://api.ipstack.com/".$ip."?access_key=".$api_key.""); $jsondata = json_decode($freegeoipjson); $countryfromip = $jsondata->country_name; echo "Country: ". $countryfromip .""; ?> 

Quelle: Erhalte Besucher Land und Stadt in PHP mit ipstack API