使用百度云加速后获取真实评论者IP

2018年8月8日01:15:46 发表评论 1,376 次
摘要

折腾博客就是一个反复跳坑、填坑的过程,累却乐在其中。在上篇的《分享三个可用的IP查询API》虽然解决了IP归属地查询的问题,可很快发现了另一个问题:大部分的IP都是相同的,且相对固定。

想到最近启用了百度匀加速的cdn,就在匀加速的支持文件中查找了节点的ip地址,果不其然,评论者的IP全部来自百度匀加速的节点。这样一来就算显示评论者IP归属地还有什么意义呢?先看看wp文档有没有评论者IP相关的filter。或许是老天眷顾,很快发现一个可以filter:pre_comment_user_ip。

折腾博客就是一个反复跳坑、填坑的过程,累却乐在其中。在上篇的《分享三个可用的IP查询API》虽然解决了IP归属地查询的问题,可很快发现了另一个问题:大部分的IP都是相同的,且相对固定。

想到最近启用了百度匀加速的cdn,就在匀加速的支持文件中查找了节点的ip地址,果不其然,评论者的IP全部来自百度匀加速的节点。这样一来就算显示评论者IP归属地还有什么意义呢?先看看wp文档有没有评论者IP相关的filter。或许是老天眷顾,很快发现一个可以filter:pre_comment_user_ip

该函数用来对即将写入数据库的评论者IP进行处理,用官方的话说就是“Standard behaviour of wordpress is to record the IP address of somebody commenting by the server variable”。

add_filter('pre_comment_user_ip','get_real_comment_ip');
function get_real_comment_ip($comment_user_ip){
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) 
$ip = getenv("HTTP_CLIENT_IP"); 
else 
if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) 
$ip = getenv("HTTP_X_FORWARDED_FOR"); 
else 
if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) 
$ip = getenv("REMOTE_ADDR"); 
else 
if (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) 
$ip = $_SERVER['REMOTE_ADDR']; 
else 
$ip = "unknown"; 
return $ip; 
}

将上述代码粘贴纸主题function文件即可。

经过测试,IP显示恢复正常。

使用百度云加速后获取真实评论者IP

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: