公司论坛升级成Discuz x3之后获取的IP地址老是不正确导致一下莫名其妙的问题,解决方法如下:
打开\source\class\discuz\discuz_application.php文件,找到_get_client_ip(大约360行)方法。将代码改为:
private function _get_client_ip(){ $ip = $_SERVER['REMOTE_ADDR']; if(isset($_SERVER['HTTP_CDN_SRC_IP'])) { $ip = $_SERVER['HTTP_CDN_SRC_IP']; } 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']; } 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;}需要注意的是不同的CDN公司有可能会有差别,最简单的方法是新建一个PHPINFO文件在服务端看一下是否有对应的变量。