
Я использую Cpanel и хотел бы отображать название страны и города на странице входа, что-то вроде этого: Например:
Your IP address is : xxx.xxx.xxx.xxx
Your Country name is: USA
Your City name is: Seattle
Для получения вышеуказанной информации я могу просто показать IP-адрес с помощью следующего PHP-кода:
<?php echo $_SERVER['REMOTE_ADDR']; ?>
Как отобразить другую информацию о пользователе, такую как название страны и города?
Пожалуйста, объясните мне шаг за шагом, как это сделать.
решение1
Вы, вероятно, захотите использоватьAPI геолокации.
ipinfo.ioпредоставляет простой текстовый интерфейс возврата, но, как и многие API геолокации, требует платных версий сервиса, если вы превышаете определенные ограничения (например, в случае ipinfo.io вам требуется более 1000 запросов в день или SSL).
Если использовать в качестве примера версию ipinfo.io без JSON, ваш PHP-код может выглядеть следующим образом:
<?php
// This turns on error display without messing with php.ini
// Delete the following two lines in production
ini_set('display_errors',1);
error_reporting(E_ALL);
// We avoid using $_SERVER['REMOTE_ADDR'] directly with a custom variable
$ip = $_SERVER['REMOTE_ADDR'];
// Otherwise, using the $_SERVER['REMOTE_ADDR'] directly
//$city = file_get_contents('http://ipinfo.io/'. $_SERVER['REMOTE_ADDR']. '/city');
// Using our custom $ip variable
$city = file_get_contents('http://ipinfo.io/'. $ip. '/city');
$country = file_get_contents('http://ipinfo.io/'. $ip. '/country');
//$region = file_get_contents('http://ipinfo.io/'. $ip. '/region');
// An alternate formatting of City State, Country
//echo $city.' '.$region.', ' .$country;
// Print our variables. <br> is a standard HTML line break.
echo 'Your IP address is: '.$ip;
echo '<br>';
echo 'Your Country name is: '.$country;
echo '<br>';
echo 'Your City name is: '.$city;
?>
Вы можете опустить все строки с //, так как это просто комментарии/примеры. Аналогично, строки отображения ошибок (ini_set/error_reporting) предназначены только для отладки. Точки до и после переменных необходимы для конкатенации. URL-адреса объединяются в
Ex. http://ipinfo.io/123.123.123.123/city
и вернуть простой текст в этой форме. ПроверьтеСтраница разработчиков ipinfo.ioдля еще нескольких идей о том, что может быть возвращено. Код выше возвращает:
Ex.
Your IP address is : xxx.xxx.xxx.xxx
Your Country name is: US
Your City name is: Las Vegas
В качестве альтернативы, если вы хотите "Соединенные Штаты" вместо "US", вы можете попробовать что-то вродеПодробности о городе ГеобайтсУстаревший API. Чтобы вернуть «Соединенные Штаты»:
<?php
function getIP() {
foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) {
if (array_key_exists($key, $_SERVER) === true) {
foreach (explode(',', $_SERVER[$key]) as $ip) {
if (filter_var($ip, FILTER_VALIDATE_IP) !== false) {
return $ip;
}
}
}
}
}
$tags=json_decode(file_get_contents('http://getcitydetails.geobytes.com/GetCityDetails?fqcn='. getIP()), true);
// Prints all available members of the $tags array, in case we forget our options
//print_r($tags);
// $tags[geobytesipaddress]) creates a non-fatal error so we use '' quotes around the array elements.
print_r('Your IP address is: ' .$tags['geobytesipaddress']);
echo '<br>';
print_r('Your Country name is: ' .$tags['geobytescountry']);
echo '<br>';
print_r('Your City name is: ' .$tags['geobytescity']);
?>
Это всего лишь слегка измененный пример кода со страницы Geobytes. Как написано, он дублирует вывод первого примера кода, но с полным названием страны:
Ex.
Your IP address is : xxx.xxx.xxx.xxx
Your Country name is: United States
Your City name is: Las Vegas
В качестве примечания: API Geobytes, похоже, поддерживает несколько больше опций, чем ipinfo.io, и позволяетмногоболее высокий уровень неоплаченных запросов (если это имеет значение).