Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

Discuz X 获取IP的方式不完全

[复制链接]
netroby 发表于 2011-4-28 10:31:32 | 显示全部楼层 |阅读模式
本帖最后由 netroby 于 2011-4-28 10:32 编辑

Discuz X 获取IP的方式不完全,导致在启用proxy 之后,无法正确获取IP, 应该加上一个HTTP_X_REAL_IP.
Discuz X1.5 X2.0都存在这个问题
  1. function _get_client_ip() {
  2.                 $ip = $_SERVER['REMOTE_ADDR'];
  3.                 if (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {
  4.                         $ip = $_SERVER['HTTP_CLIENT_IP'];
  5.                 } 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)) {
  6.                         foreach ($matches[0] AS $xip) {
  7.                                 if (!preg_match('#^(10|172\.16|192\.168)\.#', $xip)) {
  8.                                         $ip = $xip;
  9.                                         break;
  10.                                 }
  11.                         }
  12.         } elseif (isset($_SERVER["HTTP_X_REAL_IP"])) {
  13.             $ip = $_SERVER['HTTP_X_REAL_IP'];
  14.         }
  15.                 return $ip;
  16.         }
复制代码
elseif (isset($_SERVER["HTTP_X_REAL_IP"])) {
            $ip = $_SERVER['HTTP_X_REAL_IP'];
        }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-5-14 21:40 , Processed in 0.050154 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表