Typecho修复评论IP错误问题
才注意到评论那获取到的IP都是错的, 不清楚是升级Typecho还是CDN导致的, 具体修复方法如下:
- 在网站根目录添加
info.php
使用浏览器访问info.php, 在PHP Variables
中找到自己客户端IP(使用浏览器打开ipip.net可看到), 我这里看到$_SERVER['HTTP_X_REAL_FORWARDED_FOR']
后面为我的IP. - 在网站根目录中找到
config.inc.php
, 在<?php
后面换行, 添加define('__TYPECHO_IP_SOURCE__', 'HTTP_X_REAL_FORWARDED_FOR');
, HTTP_X_REAL_FORWARDED_FOR为第1步中找到的字符串. - 删除
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;
}
评论已关闭