web-dev-qa-db-fra.com

Obtenir des visiteurs pays de leur IP

Je veux que les visiteurs du pays se connaissent via leur adresse IP ... Pour le moment, je l'utilise ( http://api.hostip.info/country.php?ip= ......)

Voici mon code:

<?php

if (isset($_SERVER['HTTP_CLIENT_IP']))
{
    $real_ip_adress = $_SERVER['HTTP_CLIENT_IP'];
}

if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{
    $real_ip_adress = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
    $real_ip_adress = $_SERVER['REMOTE_ADDR'];
}

$cip = $real_ip_adress;
$iptolocation = 'http://api.hostip.info/country.php?ip=' . $cip;
$creatorlocation = file_get_contents($iptolocation);

?>

Eh bien, cela fonctionne correctement, mais le problème, c'est que le code de pays, tel que US ou CA, est renvoyé, et non le nom de pays dans son intégralité, tel que États-Unis ou Canada.

Alors, existe-t-il une bonne alternative à hostip.info?

Je sais que je peux juste écrire un code qui transformera éventuellement ces deux lettres en un nom de pays complet, mais je suis trop paresseux pour écrire un code contenant tous les pays ...

P.S: Pour une raison quelconque, je ne souhaite utiliser aucun fichier CSV prêt à l'emploi ni aucun code permettant de saisir cette information pour moi, quelque chose comme du code prêt à l'emploi ip2country et du CSV.

191
Alex C.

Essayez cette fonction simple PHP.

<?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;
}

?>

Comment utiliser:

Exemple1: Obtenir les détails de l'adresse IP du visiteur

<?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 )

?>

Exemple 2: Obtenir les détails de toute adresse IP. [Supporte 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 )

?>
439

Vous pouvez utiliser une simple API à partir de http://www.geoplugin.net/

$xml = simplexml_load_file("http://www.geoplugin.net/xml.gp?ip=".getRealIpAddr());
echo $xml->geoplugin_countryName ;


echo "<pre>";
foreach ($xml as $key => $value)
{
    echo $key , "= " , $value ,  " \n" ;
}
echo "</pre>";

Fonction utilisée

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

Sortie 

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

Cela vous donne tellement d'options avec lesquelles vous pouvez jouer 

Merci

:)

46
Baba

J'ai essayé la réponse de Chandra mais la configuration de mon serveur ne le permet pas file_get_contents ()

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

J'ai modifié le code de Chandra pour qu'il fonctionne également pour des serveurs comme celui utilisant cURL:

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('&quot;', '"', $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

?>

J'espère que cela pourra aider ;-)

25
Kai Noack

En fait, vous pouvez appeler http://api.hostip.info/?ip=123.125.114.144 pour obtenir les informations présentées en XML.

12
Marcus

Utilisez MaxMind GeoIP (ou GeoIPLite si vous n’êtes pas prêt à payer).

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

Utiliser les services suivants

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

10
GBD

Nous pouvons utiliser geobytes.com pour obtenir l'emplacement en utilisant l'adresse IP de l'utilisateur

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

il retournera des données comme celle-ci

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
)

Fonction pour obtenir l'adresse IP de l'utilisateur

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;
}
10
Ram Sharma

Découvrez php-ip-2-country de code.google. La base de données qu'ils fournissent est mise à jour quotidiennement, il n'est donc pas nécessaire de se connecter à un serveur externe pour vérifier si vous hébergez votre propre serveur SQL. Donc, en utilisant le code, il vous suffira de taper:

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

Exemple de code _ ​​(de la 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));
?>

Sortie

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
)
10
AbsoluteƵERØ

Essayez ce code simple en une ligne, vous obtiendrez le pays et la ville des visiteurs à partir de leur adresse IP à distance.

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

Il existe une version bien conservée de la base de données ip-> country gérée par la communauté Perl sur CPAN

L'accès à ces fichiers ne nécessite pas de serveur de données et les données elles-mêmes représentent environ 515K

Higemaru a écrit un wrapper PHP pour parler à ces données: php-ip-country-fast

8
djsadinoff

Vous pouvez utiliser un service Web à partir de http://ip-api.com
dans votre code php, faites comme suit: 

<?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';
}
?>

la requête a beaucoup d'autres informations:

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',
)
8
Halayem Anis

De nombreuses façons de le faire ...

Solution n ° 1:

Un service tiers que vous pouvez utiliser est http://ipinfodb.com . Ils fournissent le nom d'hôte, la géolocalisation et des informations supplémentaires.

Enregistrez-vous pour une clé API ici: http://ipinfodb.com/register.php . Cela vous permettra de récupérer les résultats de leur serveur. Sans cela, cela ne fonctionnera pas.

Copiez et collez le code PHP suivant:

$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'];

Inconvénient:

Citant sur leur site web:

Notre API gratuite utilise la version IP2Location Lite qui fournit une version inférieure précision.

Solution n ° 2:

Cette fonction renverra le nom du pays via le service http://www.netip.de/ .

$ipaddress = $_SERVER['REMOTE_ADDR'];
function geoCheckIP($ip)
{
    $response=@file_get_contents('http://www.netip.de/search?query='.$ip);

    $patterns=array();
    $patterns["country"] = '#Country: (.*?)&nbsp;#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));

Sortie:

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

Mon service ipdata.co fournit le nom du pays en 5 langues! Ainsi que l'organisation, la devise, le fuseau horaire, le code d'appel, l'indicateur, les données de l'opérateur mobile, les données du proxy et les données d'état du noeud de sortie Tor à partir de n'importe quelle adresse IPv4 ou IPv6.

Cette réponse utilise une clé d'API 'test' très limitée et destinée uniquement à tester quelques appels. Inscrivez-vous pour votre propre clé API gratuite et recevez jusqu'à 1500 demandes de développement par jour.

Il est également extrêmement évolutif: 10 régions du monde, chacune pouvant traiter plus de 10 000 requêtes par seconde!

Les options comprennent: Anglais (en), allemand (de), japonais (ja), français (fr) et chinois simplifié (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;
//美国
5
Jonathan

Pas sûr qu'il s'agisse d'un nouveau service, mais maintenant (2016) le moyen le plus simple en php est d'utiliser le service web php de geoplugin: http://www.geoplugin.net/php.gp :

Utilisation de base:

// 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));

Ils fournissent également une classe prête à l'emploi: http://www.geoplugin.com/_media/webservices/geoplugin.class.php.tgz?id=webservices%3Aphp&cache=cache

4
billynoah

J'utilise ipinfodb.com api et j'obtiens exactement ce que vous recherchez.

C'est totalement gratuit, il vous suffit de vous inscrire auprès d'eux pour obtenir votre clé d'api. Vous pouvez inclure leur classe php en téléchargeant sur leur site web ou vous pouvez utiliser le format url pour récupérer des informations.

Voici ce que je fais:

J'ai inclus leur classe php dans mon script et en utilisant le code ci-dessous:

$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'];

C'est tout.

2
Miraj

Un liner avec un adresse IP au pays API

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

> United States

Exemple : 

https://ipapi.co/country_name/ - votre pays

https://ipapi.co/8.8.8.8/nom_pays/ - pays pour IP 8.8.8.8

2
user6885709

Remplacez 127.0.0.1 par les visiteurs IpAddress.

$country = geoip_country_name_by_name('127.0.0.1');

Les instructions d'installation sont ici , et lisez ceci pour savoir comment obtenir la ville, l'état, le pays, la longitude, la latitude, etc.

2
Jack M.

vous pouvez utiliser http://ipinfo.io/ pour obtenir des détails sur l'adresse IP. Son utilisation est facile.

<?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 "<br>".$details->country; 
    echo "<br>".$details->org; 
    echo "<br>".$details->hostname; /

    ?>
2
Aqib1604

J'ai une réponse courte que j'ai utilisée dans un projet ..__ Dans ma réponse, je considère que vous avez l'adresse IP du visiteur.

$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;
}
2
Shahbaz

Je sais que c'est vieux, mais j'ai essayé quelques autres solutions ici et elles semblent être obsolètes ou retournent simplement null. Alors c'est comme ça que je l'ai fait.

Utiliser http://www.geoplugin.net/json.gp?ip= qui ne nécessite aucun type d'inscription ou de payer pour le service.

function get_client_ip_server() {
  $ipaddress = '';
if (isset($_SERVER['HTTP_CLIENT_IP']))
  $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
  $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
else if(isset($_SERVER['HTTP_X_FORWARDED']))
  $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
  $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
else if(isset($_SERVER['HTTP_FORWARDED']))
  $ipaddress = $_SERVER['HTTP_FORWARDED'];
else if(isset($_SERVER['REMOTE_ADDR']))
  $ipaddress = $_SERVER['REMOTE_ADDR'];
else
  $ipaddress = 'UNKNOWN';

  return $ipaddress;
}

$ipaddress = get_client_ip_server();

function getCountry($ip){
    $curlSession = curl_init();
    curl_setopt($curlSession, CURLOPT_URL, 'http://www.geoplugin.net/json.gp?ip='.$ip);
    curl_setopt($curlSession, CURLOPT_BINARYTRANSFER, true);
    curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, true);

    $jsonData = json_decode(curl_exec($curlSession));
    curl_close($curlSession);

    return $jsonData->geoplugin_countryCode;
}

echo "County: " .getCountry($ipaddress);

Et si vous voulez des informations supplémentaires à ce sujet, voici le retour complet de Json:

{
  "geoplugin_request":"IP_ADDRESS",
  "geoplugin_status":200,
  "geoplugin_delay":"2ms",
  "geoplugin_credit":"Some of the returned data includes GeoLite data created by MaxMind, available from <a href='http:\/\/www.maxmind.com'>http:\/\/www.maxmind.com<\/a>.",
  "geoplugin_city":"Current City",
  "geoplugin_region":"Region",
  "geoplugin_regionCode":"Region Code",
  "geoplugin_regionName":"Region Name",
  "geoplugin_areaCode":"",
  "geoplugin_dmaCode":"650",
  "geoplugin_countryCode":"US",
  "geoplugin_countryName":"United States",
  "geoplugin_inEU":0,
  "geoplugin_euVATrate":false,
  "geoplugin_continentCode":"NA",
  "geoplugin_continentName":"North America",
  "geoplugin_latitude":"37.5563",
  "geoplugin_longitude":"-99.9413",
  "geoplugin_locationAccuracyRadius":"5",
  "geoplugin_timezone":"America\/Chicago",
  "geoplugin_currencyCode":"USD",
  "geoplugin_currencySymbol":"$",
  "geoplugin_currencySymbol_UTF8":"$",
  "geoplugin_currencyConverter":1
}
0
Jayce

Vous pouvez utiliser mon service: https://SmartIP.io , qui fournit les noms de pays complets et les noms de ville de toute adresse IP. Nous exposons également les fuseaux horaires, les devises, la détection de proxy, la détection de nœuds TOR et la détection Crypto.

Vous devez simplement vous inscrire et obtenir une clé API gratuite permettant 250 000 demandes par mois.

En utilisant la bibliothèque officielle PHP, l'appel d'API devient:

$apiKey = "your API key";
$smartIp = new SmartIP($apiKey);
$response = $smartIp->requestIPData("8.8.8.8");

echo "\nstatus code: " . $response->{"status-code"};
echo "\ncountry name: " . $response->country->{"country-name"};

Consultez la documentation de l'API pour plus d'informations: https://smartip.io/docs

0
kevinj

Essayer

  <?php
  //gives you the IP address of the visitors
  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 {
      $ip = $_SERVER['REMOTE_ADDR'];
  }

  //return the country code
  $url = "http://api.wipmania.com/$ip";
  $country = file_get_contents($url);
  echo $country;

  ?>
0
Dipanshu Mahla

L'API Pays utilisateur a exactement ce dont vous avez besoin. Voici un exemple de code utilisant file_get_contents () comme vous le faites à l'origine:

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

Ceci est juste une note de sécurité sur la fonctionnalité de get_client_ip() que la plupart des réponses ici ont été incluses dans la fonction principale de get_geo_info_for_this_ip().

Ne vous fiez pas trop aux données IP contenues dans les en-têtes de requête, telles que Client-IP ou X-Forwarded-For, car elles peuvent être usurpées très facilement. Cependant, vous devez vous fier à l'adresse IP source de la connexion TCP réellement établie entre notre serveur et le client $_SERVER['REMOTE_ADDR'] comme il ne peut pas être usurpé

$_SERVER['HTTP_CLIENT_IP'] // can be spoofed 
$_SERVER['HTTP_X_FORWARDED_FOR'] // can be spoofed 
$_SERVER['REMOTE_ADDR']// can't be spoofed 

Il est correct d’obtenir le pays de l’adresse IP usurpée, mais gardez à l’esprit que l’utilisation de cette adresse IP dans n’importe quel modèle de sécurité (par exemple: interdire l’adresse IP qui envoie des requêtes fréquentes) détruira l’ensemble du modèle de sécurité. IMHO Je préfère utiliser l'IP du client même s'il s'agit de l'IP du serveur proxy.

0
Accountant م

Vous pouvez obtenir des pays et des villes de visiteurs en utilisant ipstack geo API. Vous devez obtenir votre propre API ipstack, puis utiliser le code ci-dessous:

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

Source: Récupère le pays et la ville des visiteurs dans PHP à l'aide de l'API ipstack

0