2013-08-29 22 views
-1

我正在做一個移動網站,並希望如果用戶從某一特定國家讓PHP返回值,並將其用於if語句

訪問我的網站例如加載特定的腳本:

從A國

用戶 - >加載腳本

來自其他國家的用戶 - >負載B腳本

在互聯網上搜索後,最簡單的方法是使用主機IP服務

http://api.hostip.info/country.php

所以它返回什麼是用戶的當前位置。

但我如何提取返回值,並在IF語句中使用它?

就像這樣:

if (return value of http://api.hostip.info/country.php = US){ 
load script for US user; 
} else { 
load script for users from other countries 
}; 

非常感謝:)

回答

2

做的file_get_contents(」 http://api.hostip.info/country.php))一定會返回Web服務器的國家,而不是國訪客?

我們以前使用IP2Nation卻發現它是不準確的最近,所以我們切換到這一點:

http://dev.maxmind.com/geoip/legacy/geolite/

在我們的情況下,我們下載的CSV格式的國家數據:http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip

我們然後把這個數據放到這樣的mysql表中

CREATE TABLE `geoip` (`ipstart` int(10) unsigned NOT NULL, `ipend` int(10) unsigned NOT NULL, `code` char(2) NOT NULL, PRIMARY KEY (`ipstart`,`ipend`)) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

INSERT INTO `geoip` (`ipstart`, `ipend`, `code`) VALUES (16777216, 16777471, 'au'), 
(16777472, 16778239, 'cn'), 
(16778240, 16779263, 'au'), 
etc... 

$ _SERVER [「REMOTE_ADDR」]不是例如,如果有人在代理之後,則返回正確的IP地址。你能確定訪問者的真實IP地址(儘可能地)使用此功能

function get_real_ip() { 
    if (!empty ($_SERVER['HTTP_X_FORWARDED_FOR'])) { 
    return $_SERVER['HTTP_X_FORWARDED_FOR']; 
    } elseif (!empty ($_SERVER['HTTP_CLIENT_IP'])) { 
    return $_SERVER['HTTP_CLIENT_IP']; 
    } 
    return !empty ($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : ''; 
} 

然後你可以使用PHP函數這樣得到客戶的國家:

function get_country_by_ip ($ip) { 
    $ip = ip2long ($ip); 
    $sql = 'SELECT code FROM geoip WHERE ipstart <= ' . $ip . ' AND ipend >= ' . $ip . ' LIMIT 1'; 
    // Get result of mysql query and return it here 
} 

所以你的最終代碼會是:

define ('COUNTRY_CODE_US', 'us'); 
if (get_country_by_ip (get_real_ip() == COUNTRY_CODE_US) { 
    // load script for US user; 
} else { 
    // load script for users from other countries 
}; 

該解決方案,你必須在不同的國家,而不僅僅是美國的用戶做不同的事情的能力優勢,你不是靠調用第三方我們bsites/API的可能失敗

+0

感謝您詳細的答覆。我認爲這個答案應該起作用。但是,由於我無法修改mysql(由於某些限制),所以我想嘗試使用'file_get_contents(「http://api.hostip.info/country.php?ip=」。$ _SERVER [「REMOTE_ADDR」]);'和你所建議的'get_real_ip'函數一起使用。你認爲它也會起作用嗎? –

+0

是的,應該沒問題。由於您正在調用外部資源,您可能*要檢查file_get_contents()的結果是否爲假(使用===)。如果它返回false,您可以根據您無法確定訪問者是否在美國境內的事實提供額外的腳本。 – MrCarrot

0

給這個一展身手。

$country = file_get_contents('http://api.hostip.info/country.php'); 

if($country == 'US') { 
    echo "You're in the US"; 
} else if ($country == 'Mexico') { 
    echo "Yeah, you're in Mexico."; 
} 
0

您可以使用file_get_contents()此:

if ('US' == $loc = file_get_contents('http://api.hostip.info/country.php')) { 
    echo 'From US...'; 
} else { 
    echo 'From ', $loc; 
} 

就像一個基本的啓動。

0

要確定縣用戶 你必須知道他們IP,然後發送IP以API
例如

<?php 
$ip= $_SERVER["REMOTE_ADDR"]; //gives ip 
$json=file_get_contents("http://api.hostip.info/get_json.php?ip=".$ip); // return json , 
//example {"country_name":"UNITED STATES","country_code":"US","city":"Aurora, TX","ip":"12.215.42.19"} 
// you need remember country_code 

$arrayCounty=json_decode($json,TRUE); //json in array 

//and then your if 
if ($arrayCounty["country_code"]=="US"){ 
    echo("people from US"); 
} 
else{ 

} 

?>