北京过客 2011-05-25 00:52:42 23725次浏览 7条回复 1 0 0

怎么我用

$_SERVER["REMOTE_ADDR"]

得到的是127.0.0.1? YII里怎么得到当前客户端的真实IP?

  • 回复于 2011-05-25 05:47 举报
    $_SERVER["REMOTE_ADDR"]
    

    就可以啊!

  • 回复于 2011-05-25 05:50 举报
    <?php 
    echo Yii::app()->request->getUserHostAddress(); 
    ?>
    

    这样你看行不行?

  • 回复于 2011-05-25 09:26 举报
    <?php 
    echo Yii::app()->request->getUserHostAddress(); 
    ?>
    

    这个一样是127.0.0.1,郁闷呀

  • 回复于 2011-05-25 09:29 举报
    /*
    * 此函数不能再iis下工作,但是效率比较高
    * @return string user IP address
    */
    public function getUserHostAddressNoIIS() {
      switch (true) {
        case isset($_SERVER["HTTP_X_FORWARDED_FOR"]):
          $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
          break;
        case isset($_SERVER["HTTP_CLIENT_IP"]):
          $ip = $_SERVER["HTTP_CLIENT_IP"];
          break;
          default:
      $ip = $_SERVER["REMOTE_ADDR"] ? $_SERVER["REMOTE_ADDR"] : '127.0.0.1';
      }
      if (strpos($ip, ', ') > 0) {
        $ips = explode(', ', $ip);
        $ip = $ips[0];
      }
      return $ip;
    }
    /**
    * 此函数在apache和iis下通用,但速度比getUserHostAddressNoIIS慢
    * @return string user IP address
    */
    public function getUserHostAddress()
    {
      switch(true){
        case ($ip=getenv("HTTP_X_FORWARDED_FOR")):
          break;
        case ($ip=getenv("HTTP_CLIENT_IP")):
          break;
        default:
      $ip=getenv("REMOTE_ADDR")?getenv("REMOTE_ADDR"):'127.0.0.1';
    }
    if (strpos($ip, ', ')>0) {
      $ips = explode(', ', $ip);
      $ip = $ips[0];
    }
      return $ip;
    }
    
  • 回复于 2011-05-25 09:31 举报

    试试版主同学的代码吧!

  • 回复于 2011-05-25 15:03 举报

    127.0.0.1是不是你本机在测试?貌似通过本机测试的话,访问解析服务器地址的时候,会解析成127.0.0.1的.

  • 回复于 2015-07-21 09:26 举报

    我用的是yii2:
    $ip = Yii::$app->request->userIP;
    但是我也是本地测试的,输出为:"192.168.1.40",我本地局域网地址。
    我想问的是,如果不是本地,那输出的就是“ip168”上面查询的ip?
    如果我想测试,现在没办法嘛?

    觉得很赞
您需要登录后才可以回复。登录 | 立即注册