Статус PHP IF на основе геолокации?

Есть ли способ сделать оператор PHP If на основе местоположения людей?

Моя проблема сводится к партнерским ссылкам Amazon. Ссылка для покупки DVD на Amazon.co.uk отличается от ссылки для покупки на Amazon.com, и мне нужен способ показать только правильную.

В то же время, если они не базируются ни в одной из стран, я не хочу, чтобы ссылка отображалась в первую очередь.

Пример:

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

person TonySand    schedule 04.04.2012    source источник
comment
легко, спросите пользователя. Единственный надежный способ.   -  person    schedule 04.04.2012
comment
Дагон прав. Вы можете использовать IP для определения местоположения сколько угодно, но ни один из них не является точным на 100%, а некоторые типы прокси невозможно обнаружить (и, следовательно, проверяется неправильный IP). Хотя я полагаю, это не означает, что службы определения местоположения не стоят того, чтобы их попробовать.   -  person Corbin    schedule 04.04.2012


Ответы (4)


Вы можете использовать: string geoip_country_code_by_name (string $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']); чтобы получить код страны для текущего пользователя.

person stewe    schedule 04.04.2012
comment
Кстати, это не сработает, если вы не настроили geoip. См. инструкции по настройке геоIP: php.net/manual/en/geoip .setup.php - person Mar Cejas; 04.04.2012

Вам придется использовать IP-адрес посетителя для поиска его физического местоположения. Помимо использования расширения GeoIP для PHP (как указал Стью), есть два способа сделать это:

Легкий способ

Используйте внешний сервис, например 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
person hohner    schedule 04.04.2012
comment
Я считаю, что getenv(HTTP_X_FORWARDED_FOR) должен быть getenv('HTTP_X_FORWARDED_FOR') и ​​то же самое для REMOTE_ADDR. Кроме того, люди обычно используют $_SERVER или $_ENV, хотя я думаю, что в getenv() нет ничего плохого. - person Corbin; 04.04.2012
comment
Кроме того, hostip.info думает, что мой IP-адрес находится в Калифорнии. Я на самом деле в Арканзасе. Только что проверил несколько других сервисов, и все они работают правильно. (MaxMind достигает примерно 3 миль ›.‹) - person Corbin; 04.04.2012
comment
@Corbin, видимо, я живу в Северной Англии на берегу реки. Я на самом деле в Юго-Западной Англии посреди сельской местности. Так близко - person hohner; 04.04.2012

Для этого вам нужно использовать geoip от maxmind http://www.maxmind.com/app/ip-location или есть другой вариант, найдите IP to Country API, некоторые из них есть в Интернете.

person Mar Cejas    schedule 04.04.2012

Вы можете использовать простой API из http://www.geoplugin.net/.

$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

Это дает вам так много вариантов, с которыми вы можете поиграть

Спасибо

:)

person Baba    schedule 04.04.2012