Typecho修复评论IP错误问题

才注意到评论那获取到的IP都是错的, 不清楚是升级Typecho还是CDN导致的, 具体修复方法如下:

  1. 在网站根目录添加 info.php
    使用浏览器访问info.php, 在PHP Variables中找到自己客户端IP(使用浏览器打开ipip.net可看到), 我这里看到$_SERVER['HTTP_X_REAL_FORWARDED_FOR']后面为我的IP.
  2. 在网站根目录中找到 config.inc.php, 在 <?php后面换行, 添加 define('__TYPECHO_IP_SOURCE__', 'HTTP_X_REAL_FORWARDED_FOR');, HTTP_X_REAL_FORWARDED_FOR为第1步中找到的字符串.
  3. 删除 info.php, 修改完毕.

看了typecho中获取IP的地方, 在 /var/Typecho/Request.php中, 代码如下:

/**
 * 设置ip地址
 *
 * @access public
 * @param string $ip
 */
public function setIp($ip = NULL)
{
    if (!empty($ip)) {
        $this->_ip = $ip;
    } else {
        switch (true) {
            case defined('__TYPECHO_IP_SOURCE__') && NULL !== $this->getServer(__TYPECHO_IP_SOURCE__):
                list($this->_ip) = array_map('trim', explode(',', $this->getServer(__TYPECHO_IP_SOURCE__)));
                break;
            case NULL !== $this->getServer('REMOTE_ADDR'):
                $this->_ip = $this->getServer('REMOTE_ADDR');
                break;
            case NULL !== $this->getServer('HTTP_CLIENT_IP'):
                $this->_ip = $this->getServer('HTTP_CLIENT_IP');
                break;
            default:
                break;
        }
    }

    if (empty($this->_ip) || !self::_checkIp($this->_ip)) {
        $this->_ip = 'unknown';
    }
}

/**
 * 获取ip地址
 *
 * @access public
 * @return string
 */
public function getIp()
{
    if (NULL === $this->_ip) {
        $this->setIp();
    }

    return $this->_ip;
}

标签: Typecho

评论已关闭