Я хочу получить страну посетителя через свой 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('"', '"', $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);
Используйте 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
Много разных способов сделать это …
Одна сторонняя служба, которую вы можете использовать, – 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, которая обеспечивает более низкую точность.
Эта функция вернет название страны, используя службу 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: (.*?) #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