我正在开发一个特定国家的网站,我认为我的php服务器上安装了地理重定向。基本方法是在$_SERVER['REMOTE_ADDR']
中记录传入的IP地址,然后使用地理位置数据库将其转换为国家/地区信息。我确实选择了Maxmind地理定位服务。
我通过谷歌的力量和实验能力获得的最终剧本如下
<?php
getCountry($_SERVER['REMOTE_ADDR']);
$ip=$_SERVER['REMOTE_ADDR'];
function getCountry($ipAddress)
{
// get the country of the IP from the MAXMIND
$country="";
// include functions
include("geoip.inc.php");
// read GeoIP database
$handle = geoip_open("GeoIP.dat", GEOIP_STANDARD);
// map IP to country
$country = geoip_country_name_by_addr($handle, $ipAddress);
// close database handler
geoip_close($handle);
if ($country==""|| empty($country))
{
$country="Unknown";
}
return $country;
}
$country_code = geoip_country_code_by_addr($gi, "$ip");
// Country name is not used so commented
// Get Country Name based on source IP
//$country = geoip_country_name_by_addr($gi, "$ip");
geoip_close($gi);
switch($country_code)
{
case "US": header("Location: http://site1.com
"); break;
case "CA": header("Location: http://site2.com
"); break;
case "GB": header("Location: http://site3.com
"); break;
default: header("Location: http://site.com
");
}
?>
我从https://www.maxmind.com/download/geoip/api/php-20120410/geoip.inc
下载了 geoip.inc 来自http://dev.maxmind.com/geoip/legacy/geolite/ 的和 GeoIP.dat
BUT 某个地方出了问题。代码不会执行,每次都会出现一些错误。已经尝试了很多愚蠢错误的排列,但没有任何效果。调用URL会在URL上显示文件geoip.inc的代码。
试图在SO上找到任何类似的问题,但不能。详细的帮助将不胜感激。提前谢谢。
答案 0 :(得分:1)
你需要应用php扩展来确保inc被处理为PHP
添加函数并调用getCountry($ _ SERVER ['REMOTE_ADDR']);
请注意,有些人可能没有设置此服务器变量,或者它是准确的 - 代理服务器或其他东西 在与脚本
相同的文件夹中使用geoip.inc.php和GeoIP.dat编辑:修改您编辑的代码
//包含函数 包括( “geoip.inc.php”);
$ip=$_SERVER['REMOTE_ADDR'];
$country_code = getCountry($ip);
switch($country_code)
{
case "US": header("Location: http://site1.com
"); break;
case "CA": header("Location: http://site2.com
"); break;
case "GB": header("Location: http://site3.com
"); break;
default: header("Location: http://site.com
");
}
function getCountry($ipAddress)
{
// get the country of the IP from the MAXMIND
$country="";
// read GeoIP database
$handle = geoip_open("GeoIP.dat", GEOIP_STANDARD);
// map IP to country
$country = geoip_country_name_by_addr($handle, $ipAddress);
// close database handler
geoip_close($handle);
if ($country==""|| empty($country))
{
$country="Unknown";
}
return $country;
}