2

Is there a way to do a PHP If statement based on the persons location?

My problem comes down to Amazon Affiliate links. The link to buy a DVD on Amazon.co.uk is different to the one to buy from Amazon.com and I want a way to only show the correct one.

At the same time, If they aren't based in either country, then I don't want the link to show in the first place.

Example:

If Location = UK; print "amazon-UK-link"
If Location = US; print "amazon-US-link"
If location = None of the above; print nothing
4

4 回答 4

1

您可以使用:字符串 geoip_country_code_by_name(字符串 $hostname)

例子:

<?php
$country = geoip_country_code_by_name('www.example.com');
if ($country) {
    echo 'This host is located in: ' . $country;
}
?>

输出:

该主机位于:美国

对于您的情况,您可以使用:geoip_country_code_by_name($_SERVER['REMOTE_ADDR']);获取当前用户的国家代码。

于 2012-04-04T02:53:19.037 回答
1

您将不得不使用访问者的 IP 地址来查找他们的实际位置。除了使用 PHP 的 GeoIP 扩展(正如 Stee 指出的那样)之外,还有两种方法可以做到这一点:

简单的方法

使用像http://www.hostip.info这样的外部服务

使用您自己的 MySQL 数据

1.) 检索访问者的 IP 地址:

if (getenv('HTTP_X_FORWARDED_FOR')) 
{
    $ip_address = getenv('HTTP_X_FORWARDED_FOR');
} 
else 
{
    $ip_address = getenv('REMOTE_ADDR');
}

2.) 将访问者的 IP 地址转换为 IP 号:

$ips = explode(".",$ip_address);
return ($ips[3] + $ips[2] * 256 + $ips[1] * 256 * 256 + $ips[0] * 256 * 256 * 256);

3.) 从您可以在此处下载的数据库中找到 IP 号码。例如:IP 地址 202.186.13.4 转换为 IP 号 3401190660。它位于以下 IP 号的开头和结尾之间:

Beginning_IP | End_IP      | Country  | ISO
-------------+-------------+----------+----
3401056256   | 3401400319  | MALAYSIA | MY
于 2012-04-04T02:55:49.203 回答
0

您可以使用来自http://www.geoplugin.net/的简单 API

$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" ;
}

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

它让你有很多可以玩的选择

谢谢

:)

于 2012-04-04T12:20:00.793 回答
0

您需要通过 maxmind http://www.maxmind.com/app/ip-location使用 geoip,或者还有另一种选择,搜索 Country API 的 IP,网上有一些。

于 2012-04-04T02:53:15.493 回答