Fork me on GitHub

后台记录显示IP地址是0.0.0.1,大家有这个问题吗?

edited 2013年09月16日 问答求助

查看用户列表,发现全部都是0.0.0.1的IP地址。看了一下class.request.php,感觉没什么问题。莫非哪儿设置的问题?

补充:服务器CentOS + Nginx + PHP fastcgi

回复

  • 同问。。。

  • 我看了代码,是程序Bug。在Issues找到有人发过,从2.1开始就有这个问题。

    写那个代码的人估计状态不好。没有把 FromEnvironment 和 LoadEnvironment 处理正确。都没有加载环境变量,怎么会读取到值呢?本来按理说环境变量是空值,该死的又有一个强制转换IP的函数,对于空值直接返回0.0.0.1。

    这个问题都发了很多天了,因为不是当前正式版Bug,估计要慢慢等他们改进了。

    BTW 这个论坛的官方社区好像不是很活跃。

  • 哈哈我这里也是0.0.0.1。

    官方的主要开发人员也就三个左右,可能还没顾上这bug。我有空修修看

  • edited 2013年09月17日 #4

    @chuck911 晚上睡不着,打算去把IP的Bug修改了。重新checkout官方代码,发现在develop分支下面已经修改了,只是还没有Release。看中文版上面写的代码是最新的,目前看来是master分支。

    解决的办法基本和我的想法一样,放弃使用框架的环境变量读取IP地址,直接用_SESVER数组读取。其实,我原本打算是用GetValue函数来读取。Anyway!

      // Request IP
    
      // Loadbalancers
      $IP = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? GetValue('HTTP_X_FORWARDED_FOR',$_SERVER) : $_SERVER['REMOTE_ADDR'];
      if (strpos($IP, ',') !== FALSE) {
         $Matched = preg_match_all('/([\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3})(?:, )?/i', $IP, $Matches);
    
         // If we found matching IPs
         if ($Matched) {
            $IPs = $Matches[1];
            $IP = $IPs[0];
    
         // Fallback 
         } else { $IP = $_SERVER['REMOTE_ADDR']; }
      }
    
      // Varnish
      $OriginalIP = GetValue('HTTP_X_ORIGINALLY_FORWARDED_FOR', $_SERVER, NULL);
      if (!is_null($OriginalIP)) $IP = $OriginalIP;
    
      $IP = ForceIPv4($IP);
      $this->RequestAddress($IP);
    
登录注册 才能回复。