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_FOR

 
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;
}

 

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

将其修改为:

 

复制代码 代码如下:
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论坛使用CDN后无法获取用户真实IP的解决方法

发表评论

您需要后才能发表评论