Discuz论坛使用CDN后无法获取用户真实IP的解决方法


当前第2页 返回上一页

解决方法(Discuz x2.5)

打开文件\source\class\discuz\discuz_application.php 找到如下代码:


代码如下:

private function _get_client_ip() {
$ip = $_SERVER['REMOTE_ADDR'];
if (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)) {
foreach ($matches[0] AS $xip) {
if (!preg_match('#^(10|172\.16|192\.168)\.#', $xip)) {
$ip = $xip;
break;
}
}
}
return $ip;
}

将其修改为:


代码如下:

private function _get_client_ip() {
$ip = $_SERVER['REMOTE_ADDR'];
if (isset($_SERVER['HTTP_X_REAL_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_REAL_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_REAL_FORWARDED_FOR'];
}
elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
elseif (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
}
return $ip;
}

以上操作后,登陆CDN后台和你的Discuz论坛后台分别清除缓存即可。

更多相关Discuz论坛的内容来自木庄网络博客


标签:Discuz论坛

返回前面的内容

相关阅读 >>

discuz!x3新功能屏蔽水帖介紹及使用(图文)

php5与mysql数据库操作常用代码 收集

discuz图片顺序混乱解决方案

日常收集整理php正则表达式(超常用)

如何在iis环境下配置rewrite规则 图文

腾讯网站分析工具tencent analysis腾讯分析的使用教程

discuz!软件环境配置技巧

Discuz论坛宣传与优化技巧概述

用cookies实现闪电登录论坛方法

discuz批量修改论坛版块权限和用户组权限的方法

更多相关阅读请进入《Discuz论坛》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...