Discuz! + Cloudflare Tunnel 获取用户IP的方法
分类 网站技术/村民张先生 发布于 2025-11-08 19:04
修改 source/class/discuz/discuz_application.php 中的 _get_client_ip() 函数为以下内容:
private function _get_client_ip() {
$headers = [
'HTTP_X_REAL_IP',
'HTTP_X_FORWARDED_FOR',
'HTTP_CLIENT_IP',
'HTTP_CF_CONNECTING_IP',
'HTTP_CF_PSEUDO_IPV4',
'REMOTE_ADDR'
];
foreach ($headers as $key) {
if (!empty($_SERVER[$key]) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER[$key]) && $_SERVER[$key] !== '127.0.0.1') {
return $_SERVER[$key];
}
}
// 万一没有任何合法 IP
return '0.0.0.0';
}
如果服务器没有IPv6,记得在Cloudflare中打开 PSEUDO IPV4 功能(自动将IPv6地址转换为一个伪IPv4地址供你记录)。
欢迎谈谈你的看法(无须登录) *正文中请勿包含"http://"否则将被拦截