我正在使用 Cpanel,我想在登录页面显示国家名称和城市名称,如下所示:例如:
Your IP address is : xxx.xxx.xxx.xxx
Your Country name is: USA
Your City name is: Seattle
对于以上信息,我只能通过以下 php 代码显示 IP 地址:
<?php echo $_SERVER['REMOTE_ADDR']; ?>
如何显示其他用户信息,如国家名称和城市名称?
请一步一步指导我如何操作。
答案1
您可能希望使用地理位置 API。
ipinfo.io提供了一个简单的纯文本返回接口,但是,与许多地理位置 API 一样,如果超出某些限制,则需要付费版本的服务(例如,在 ipinfo.io 的情况下,您需要每天超过 1000 个请求或 SSL)。
以非 JSON 版本的 ipinfo.io 为例,您的 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
或者,如果你想要“United States”而不是“US”,你也可以尝试类似Geobytes 城市详情旧版 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
顺便提一下,Geobytes API 似乎比 ipinfo.io 支持更多选项,并且允许很多更高的未付费请求率(如果重要的话)。