GeoRedirection脚本无法正常工作

时间:2013-11-05 09:09:39

标签: php api geolocation ip


我正在开发一个特定国家的网站,我认为我的php服务器上安装了地理重定向。基本方法是在$_SERVER['REMOTE_ADDR']中记录传入的IP地址,然后使用地理位置数据库将其转换为国家/地区信息。我确实选择了Maxmind地理定位服务。 我通过谷歌的力量和实验能力获得的最终剧本如下

的index.php

<?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上找到任何类似的问题,但不能。详细的帮助将不胜感激。提前谢谢。

1 个答案:

答案 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;


            }