我现在正在做一个php网站,但对有些地区和国家的访问要进行控制,
想根据客气端IP,然后定位到地区和国家,再进行判定是否跳转到其他页面
java中的IP定位跳转我做过,想请问一下各位,在php中该怎样做?

解决方案 »

  1.   

    <?php
    function GetIP(){
    if(!empty($_SERVER["HTTP_CLIENT_IP"])){
    $cip = $_SERVER["HTTP_CLIENT_IP"];
    }else if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){
    $cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    }else if(!empty($_SERVER["REMOTE_ADDR"])){
    $cip = $_SERVER["REMOTE_ADDR"];
    }else{
    $cip = "无法获取!";
    }
    return $cip;
    }
    //这里再对IP进行判断
    ?>
      

  2.   

    //通常,从这三个里,应该就能取到ip了,其中第一个是用了代理后,某些代理会发生真实用户ip信息
    //回帖是因为,我很好奇,LZ的头像,胸器哪里去啦
    $_SERVER['HTTP_X_FORWARDED_FOR'];
    $_SERVER['HTTP_CLIENT_IP'];
    $_SERVER['REMOTE_ADDR'];
      

  3.   

    主要的就是如何定位 
    ip获取网上一大堆……
    下一个比较全的ip库先
      

  4.   

    思路和方法一样,把你java的改成PHP的就可以了
      

  5.   

    谢谢回帖者,问题已经得到了解决,和大家分享一下
    从网上找的资料,用的是GeoIP库:先下载 GeoIP 数据文件
    wget -c http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
    gunzip GeoIP.dat.gz接着下载 GeoIP 的 PHP 文件,保存为 geoip.php
    http://geolite.maxmind.com/download/geoip/api/php/geoip.inc好了,直接使用
    <?php
     
        //计时开始
        function utime() {
            $time = explode( " ", microtime() );
            $usec = (double)$time[0];
            $sec = (double)$time[1];
            return $usec + $sec;
        }
        $startTimes = utime();
     
        // include the php script
        // wget -c http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
        // gunzip GeoIP.dat.gz
        include("geoip.php");
     
        // open the geoip database
        $gi = geoip_open("GeoIP.dat",GEOIP_STANDARD);
     
        // 获取国家代码
        $country_code = geoip_country_code_by_addr($gi, $_SERVER['REMOTE_ADDR']);
        echo "Your country code is: <strong>$country_code</strong> <br />";
     
        // 获取国家名称
        $country_name = geoip_country_name_by_addr($gi, $_SERVER['REMOTE_ADDR']);
        echo "Your country name is: <strong>$country_name</strong> <br />";
     
        // close the database
        geoip_close($gi);
     
        //运行结束时间
        $endTimes = utime();
        $runTimes = sprintf( '%0.4f', ( $endTimes - $startTimes ) );
        echo "Processed in " . $runTimes . "second.";
    ?>此方法使用二进制文件做为数据库,速度很快,不需要数据库。我试了执行时间是0.001,每秒完成1000次不成问题。