2012-04-04 2 views
1

사람 위치를 기반으로 PHP If 문을 수행하는 방법이 있습니까?지리적 위치에 기반한 IF IF Statment?

내 문제는 Amazon Affiliate 링크에서 발생합니다. Amazon.co.uk에서 DVD를 구입하는 링크는 Amazon.com에서 구입하는 것과 다르므로 올바른 것을 보여줄 수있는 방법을 원합니다.

동시에 두 국가에 기반하지 않는 경우 링크가 처음에는 나타나지 않기를 바랍니다.

예 :

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

간편하게 사용자에게 문의하십시오. 신뢰할 수있는 유일한 방법. –

+0

Dagon이 옳습니다. IP를 원하는 위치 서비스에 사용할 수는 있지만 100 % 정확한 것은 없으며 일부 유형의 프록시는 탐지 할 수 없으므로 잘못된 IP가 확인됩니다. 내가 생각하기는하지만 위치 서비스는 가치가 없다는 것을 의미하지는 않습니다. – Corbin

답변

0

당신은 maxmind http://www.maxmind.com/app/ip-location에 의해 그것을 위해 GeoIP가를 사용할 필요가 또는 다른 옵션, 국가 API에 대한 IP 검색이있어,이 웹에 일부를.

1

당신은 사용할 수 있습니다 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']); 현재 사용자의 국가 코드를 가져옵니다.

+0

BTW, geoip을 설정하지 않으면 작동하지 않습니다. geoip 설정 방법에 대한 지침을 참조하십시오. http://www.php.net/manual/en/geoip.setup.php –

1

실제 위치를 조회하려면 방문자의 IP 주소를 사용해야합니다. 그렇다 PHP의 GeoIP가 확장 (stewe 지적으로) 사용에서, 이렇게 두 가지 방법이 있습니다

쉬운 방법

을 사용하여 자신과 함께 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'); 
} 
,536,913,632 10

2)의 IP 번호 방문자의 IP 주소를 변환 :

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

3.) 데이터베이스 당신이 할 수있는 download here에서 IP 번호를 찾습니다. 예 : IP 주소 202.186.13.4가 IP 번호 3401190660으로 변환됩니다.

Beginning_IP | End_IP  | Country | ISO 
-------------+-------------+----------+---- 
3401056256 | 3401400319 | MALAYSIA | MY 
+1

getenv (HTTP_X_FORWARDED_FOR)는 getenv ('HTTP_X_FORWARDED_FOR')이어야하며 REMOTE_ADDR에 대해서도 동일해야합니다. 또한 사람들은 일반적으로 $ _SERVER 또는 $ _ENV를 사용합니다. getenv()에는 아무 문제가 없습니다. – Corbin

+0

또, 와우, hostip.info는 내 IP가 캘리포니아에 있다고 생각합니다. 나는 실제로 Arkansas에있다. 방금 몇 가지 다른 서비스를 확인했는데 모두 올바르게되었습니다. (MaxMind는 약 3 마일>. <) – Corbin

+0

@ 코르bin 분명히 나는 ​​강둑에 북쪽 잉글랜드에 살고있다. 나는 실제로 시골의 한가운데에있는 사우스 웨스트 잉글랜드에있다. 그렇게 가까이에 – hohner

0

당신이 그것을 만드는

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 

당신이 너무 많은이 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; 
} 

출력에서 ​​간단한 API를 사용할 수 있습니다 : 그것은 시작과 다음의 IP 번호의 끝 사이 함께 놀 수있는 옵션

감사합니다.

: