2


私は国固有の Web サイトを開発しています。この Web サイトでは、php サーバーに地理リダイレクトがインストールされていると考えていました。基本的なアプローチは、着信 IP アドレスを記録し$_SERVER['REMOTE_ADDR']、地理位置情報データベースを使用してそれを国情報に変換することです。私は 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

しかし 、どこかで何かがうまくいかない。コードは実行されず、毎回いくつかのエラーが発生します。ばかげた間違いの多くの順列を試しましたが、何もうまくいきませんでした。URL を呼び出すと、URL 上のファイル geoip.inc のコードが表示されます。

SOで同様の質問を見つけようとしましたが、できませんでした。詳細なヘルプをいただければ幸いです。前もって感謝します。

4

1 に答える 1

1

inc が PHP として処理されるようにするには、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 に答える