2012-04-04 16 views
1

人の場所に基づいてPHP If文を実行する方法はありますか?ジオロケーションに基づくPHP IFステートメント?

私の問題はAmazonアフィリエイトのリンクになります。 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

ダゴンが正しいです。あなたが望む場所サービスを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

ところで、geoipを設定していないと動作しません。セットアップのgeoipする方法の手順を参照してください。http://www.php.net/manual/en/geoip.setup.php –

1

物理的な場所を検索するには、訪問者のIPアドレスを使用する必要があります。

独自でhttp://www.hostip.info

などの外部サービスを使用して簡単な方法:別にPHP用のGeoIP拡張を(steweが指摘したように)を使用してから、これには2通りの方法があります

if (getenv('HTTP_X_FORWARDED_FOR')) 
{ 
    $ip_address = getenv('HTTP_X_FORWARDED_FOR'); 
} 
else 
{ 
    $ip_address = getenv('REMOTE_ADDR'); 
} 
:MySQLデータ

1)は、訪問者のIPアドレスを取得します。 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に変換されます。これは、最初と次のIP番号の終了との間にある:

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

私はそれのgetenvを信じて(HTTP_X_FORWARDED_FOR)のgetenv(「HTTP_X_FORWARDED_FOR」)とREMOTE_ADDRで同じである必要があります。また、getenv()には何も問題はないと思いますが、通常は$ _SERVERまたは$ _ENVを使用します。 – Corbin

+0

また、私のIPアドレスはカリフォルニアにあるとWow、hostip.infoは考えています。私は実際にアーカンソー州にいる。ちょうどいくつかの他のサービスをチェックしたところ、すべて正しいものになりました。 (MaxMindはそれを約3マイルにします。)< – Corbin

+0

@Corbin明らかに私は川のほとりで北イングランドに住んでいます。私は実際には南西イングランドの田舎の真ん中にいる。とても近い – hohner

0

あなたはそれはあなたが非常に多くを持っています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 

から、単純なAPIを使用することができますあなたが周りに遊ぶことができるオプション

ありがとう

:)

関連する問題