我正在制作一个移动网站,并希望在用户从特定国家/地区访问我的网站时加载特定脚本
例如:
来自国家/地区的用户 - >加载脚本
来自其他国家/地区的用户 - >加载B脚本
在互联网上搜索后,最简单的方法是使用Hostip服务
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
};
非常感谢:)
答案 0 :(得分:2)
执行file_get_contents('http://api.hostip.info/country.php))肯定会返回网络服务器的国家/地区,而不是访问者的国家/地区?
我们曾经使用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
};
此解决方案的优势在于,您可以为不同国家/地区的用户执行不同的操作,而不仅仅是美国,并且您不依赖于可能失败的第三方网站/ API的调用
答案 1 :(得分: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.";
}
答案 2 :(得分:0)
您可以使用file_get_contents()
:
if ('US' == $loc = file_get_contents('http://api.hostip.info/country.php')) {
echo 'From US...';
} else {
echo 'From ', $loc;
}
只是一个基本的开始。
答案 3 :(得分: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{
}
?>