Получение страны-посетителя от их IP-адресов

Я хочу получить страну посетителя через свой IP … Сейчас я использую это ( http://api.hostip.info/country.php?ip= ……)

Вот мой код:

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

Ну, это работает нормально, но дело в том, что это возвращает код страны, например, США или CA., а не все название страны, например, Соединенные Штаты или Канада.

Итак, есть ли хорошая альтернатива hostip.info?

Я знаю, что могу просто написать код, который в конечном итоге превратит эти две буквы в название всей страны, но я просто слишком ленив, чтобы написать код, содержащий все страны …

PS: По какой-то причине я не хочу использовать готовый CSV-файл или любой код, который захватит эту информацию для меня, что-то вроде ip2country готового кода и CSV.

Попробуйте эту простую функцию 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; } ?> 

Как использовать:

Пример1: Получить информацию об адресе IP-адреса посетителя

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

Пример 2. Получить информацию о любом IP-адресе. [Поддержка 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 ) ?> 

Вы можете использовать простой API от 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>"; 

Используемая функция

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

Вывод

 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 

У вас есть так много вариантов, с которыми вы можете

благодаря

🙂

Я попробовал ответить Chandra, но моя конфигурация сервера не позволяет file_get_contents ()

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

Я изменил код Chandra, чтобы он также работал на таких серверах, используя 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 ?> 

Надеюсь, это поможет 😉

Фактически вы можете вызвать http://api.hostip.info/?ip=123.125.114.144, чтобы получить информацию, которая представлена ​​в XML.

Использовать следующие услуги

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

Используйте MaxMind GeoIP (или GeoIPLite, если вы не готовы платить).

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

Мы можем использовать geobytes.com для получения местоположения с использованием IP-адреса пользователя

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

он вернет данные, подобные этому

 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 ) 

Функция для получения IP-адреса пользователя

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

Попробуйте этот простой код с одной строкой, вы получите страну и город посетителей со своего IP-адреса.

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

Проверьте php-ip-2-страну из code.google. База данных, которую они предоставляют, обновляется ежедневно, поэтому нет необходимости подключаться к внешнему серверу для проверки, если вы размещаете свой собственный SQL-сервер. Поэтому, используя код, вам нужно будет только ввести:

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

Пример кода (из ресурса)

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

Вывод

 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 ) 

Существует хорошо поддерживаемая версия файла ip-> country, поддерживаемая сообществом Perl в CPAN

Доступ к этим файлам не требует использования dataserver, а сами данные составляют примерно 515 тыс.

Higemaru написал фрейм-оболочку, чтобы поговорить с этими данными: php-ip-country-fast

Много разных способов сделать это …

Решение №1:

Одна сторонняя служба, которую вы можете использовать, – http://ipinfodb.com . Они предоставляют имя хоста, геолокацию и дополнительную информацию.

Зарегистрируйтесь для ключа API здесь: http://ipinfodb.com/register.php . Это позволит вам получать результаты со своего сервера, без этого он не будет работать.

Скопируйте и пропустите следующий код PHP:

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

Даунсайд:

Цитата из их сайта:

Наш бесплатный API использует версию IP2Location Lite, которая обеспечивает более низкую точность.

Решение №2:

Эта функция вернет название страны, используя службу 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)); 

Вывод:

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

Вы можете использовать веб-сервис с сайта http://ip-api.com
в вашем php-коде, выполните следующие действия:

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

запрос имеет много другой информации:

 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', ) 

Не уверен, что это новая услуга, но теперь (2016) самый простой способ в php – использовать веб-службу gepugin php: http://www.geoplugin.net/php.gp :

Основное использование:

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

Они также предоставляют готовый построенный класс: http://www.geoplugin.com/_media/webservices/geoplugin.class.php.tgz?id=webservices%3Aphp&cache=cache

У меня есть короткий ответ на этот вопрос, который я использовал в проекте. В моем ответе я считаю, что у вас есть IP-адрес посетителя

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

Если это поможет вам проголосовать за мой ответ.

Я использую ipinfodb.com api и получаю именно то, что вы ищете.

Его совершенно бесплатно, вам просто нужно зарегистрироваться у них, чтобы получить свой ключ api. Вы можете включить их php-класс, загрузив их со своего веб-сайта, или вы можете использовать формат url для извлечения информации.

Вот что я делаю:

Я включил их php-класс в свой скрипт и используя приведенный ниже код:

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

Это оно.

вы можете использовать http://ipinfo.io/, чтобы получить информацию об ip-адресе. Его простота использования.

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

Замените 127.0.0.1 посетителями IpAddress.

 $country = geoip_country_name_by_name('127.0.0.1'); 

Инструкции по установке приведены здесь , и прочтите это, чтобы узнать, как получить город, штат, страну, долготу, широту и т. Д. …

Мой сервис https://ipdata.co предоставляет название страны на 5 языках! Как и несколько других точек данных.

Варианты включают; Английский (en), немецкий (de), японский (ja), французский (fr) и упрощенный китайский (za-CH)

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

API-интерфейс пользователя имеет именно то, что вам нужно. Вот пример кода с помощью file_get_contents (), который вы изначально делали:

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