-1

我正在制作一个移动网站,如果用户从特定国家/地区访问我的网站,我想加载特定脚本

例如:

来自 A 国的用户 --> 加载 A 脚本

其他国家的用户 --> 加载 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
};

非常感谢 :)

4

4 回答 4

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

于 2013-08-29T15:23:00.660 回答
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.";
}
于 2013-08-29T15:16:33.203 回答
0

您可以file_get_contents()为此使用:

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

就像一个基本的开始。

于 2013-08-29T15:19:26.880 回答
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{

}

?>
于 2013-08-29T15:22:04.853 回答