我想通过他们的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);

?>

好吧,它正常工作,但问题是,这返回国家代码,如US或CA.,而不是整个国家名称,如美国或加拿大。

那么,除了hostip.info提供的这些,还有什么好的选择吗?

我知道我可以编写一些代码,最终将这两个字母转换为整个国家的名称,但我实在懒得编写包含所有国家的代码……

注:出于某种原因,我不想使用任何现成的CSV文件或任何代码,将抓取这个信息为我,像ip2country现成的代码和CSV。


当前回答

有很多不同的方法……

解决方案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

其他回答

如果你需要尽快获得国家,我会建议geoip插件为您的web服务器。

对于nginx;

正确设置后,您将从$_SERVER变量中获得国家代码。

我每秒执行500(+-)次,非常快。

实际上,您可以调用http://api.hostip.info/?ip=123.125.114.144来获取以XML形式显示的信息。

由CPAN的Perl社区维护的ip->国家数据库有一个维护良好的平面文件版本

访问这些文件不需要数据服务器,数据本身大约是515k

Higemaru编写了一个PHP包装器来处理这些数据:PHP -ip-country-fast

这可以接受吗? 纯PHP

$country = geoip_country_code_by_name($_SERVER['REMOTE_ADDR']);
print $country;

裁判:https://www.php.net/manual/en/function.geoip-country-code-by-name.php

你可以使用ipstack地理API获取访问者国家和城市。你需要获得自己的ipstack API,然后使用下面的代码:

<?php
 $ip = $_SERVER['REMOTE_ADDR']; 
 $api_key = "YOUR_API_KEY";
 $freegeoipjson = file_get_contents("http://api.ipstack.com/".$ip."?access_key=".$api_key."");
 $jsondata = json_decode($freegeoipjson);
 $countryfromip = $jsondata->country_name;
 echo "Country: ". $countryfromip ."";
?>

来源:使用ipstack API在PHP中获取访问者国家和城市