试试这个简单的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 )
?> 继续阅读与本文标签相同的文章
上一篇 :
腾讯QQ二十年:那些尘封在QQ里的青春往事
下一篇 :
php对象转换为数组的几种方法
-
建设5G网络的重要环节和采用两种组网方式的争议都有哪些?
2026-05-14栏目: 教程
-
谷歌新品Pixel 4推出人脸识别翻车了?其实不然
2026-05-14栏目: 教程
-
叫板百万级豪车!Aion LX到底拥有哪些硬核实力?
2026-05-14栏目: 教程
-
收藏!YTA全球品牌活动回顾
2026-05-14栏目: 教程
-
简单高效!Excel选中格式相同的多个单元格
2026-05-14栏目: 教程
