2


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

索引.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

但是 某个地方出了问题。代码不执行,每次都有一些错误。尝试了很多愚蠢的错误排列,但没有任何效果。调用 URL 会在 URL 上显示文件 geoip.inc 的代码。

试图在 SO 上找到任何类似的问题,但找不到。详细的帮助将不胜感激。提前致谢。

4

1 回答 1

1

您需要应用 php 扩展程序以确保将 inc 作为 PHP 处理

添加函数并调用 getCountry($_SERVER['REMOTE_ADDR']);

请注意,有些人可能没有设置此服务器变量或者它是准确的 - 代理的 cos 或其他东西 在与脚本相同的文件夹中使用 geoip.inc.php 和 GeoIP.dat

已编辑:修改您已编辑的代码

// 包含函数 include("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;


            }
于 2013-11-05T09:16:35.050 回答