Phpwind获取用户真实IP
使用nat123端口映射后,可能会遇到phpwind网站无法获取用户真实IP的情况,对应解决方法有下。
phpwind8.5的方法:
修改 /require/common.php搜索“HTTP_CLIENT_IP”,找到如下代码
function pwGetIp() {
global $pwServer, $db_xforwardip;
if ($db_xforwardip) {
if ($pwServer['HTTP_X_FORWARDED_FOR'] && $pwServer['REMOTE_ADDR']) {
if (strstr($pwServer['HTTP_X_FORWARDED_FOR'], ',')) {
$x = explode(',', $pwServer['HTTP_X_FORWARDED_FOR']);
$pwServer['HTTP_X_FORWARDED_FOR'] = trim(end($x));
}
if (preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $pwServer['HTTP_X_FORWARDED_FOR'])) {return $pwServer['HTTP_X_FORWARDED_FOR'];}
} elseif ($pwServer['HTTP_CLIENT_IP'] && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $pwServer['HTTP_CLIENT_IP'])) {return $pwServer['HTTP_CLIENT_IP'];}
}
$db_xforwardip = 0;
if (preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $pwServer['REMOTE_ADDR'])) {return $pwServer['REMOTE_ADDR'];}
return 'Unknown';
}
将其修改为如下代码:
function pwGetIp() {
global $pwServer, $db_xforwardip;
$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;
}
phpwind 8.7方法:
其它8.x版本可能有差异,可以对照修改。
修改 /require/common.php搜索“HTTP_CLIENT_IP”,找到如下代码function pwGetIp() {global $pwServer, $db_xforwardip;if ($db_xforwardip) {if ($pwServer['HTTP_X_FORWARDED_FOR'] && $pwServer['REMOTE_ADDR']) {
if (strstr($pwServer['HTTP_X_FORWARDED_FOR'], ',')) {
$x = explode(',', $pwServer['HTTP_X_FORWARDED_FOR']);
$pwServer['HTTP_X_FORWARDED_FOR'] = trim(end($x));
}if (preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $pwServer['HTTP_X_FORWARDED_FOR'])) {return $pwServer['HTTP_X_FORWARDED_FOR'];}
} elseif ($pwServer['HTTP_CLIENT_IP'] && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $pwServer['HTTP_CLIENT_IP'])) {return $pwServer['HTTP_CLIENT_IP'];}
}$db_xforwardip = 0;if (preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $pwServer['REMOTE_ADDR'])) {return $pwServer['REMOTE_ADDR'];}
return 'Unknown';
}
将其修改为如下代码:function pwGetIp() {global $pwServer, $db_xforwardip;$ip = $_SERVER['REMOTE_ADDR'];if (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_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;}
phpwind9.0修改方法:打开 "/src/aCloud/system/core/ACloudSysCoreCommon.php",修改前建议备份本文件。
查找“get_Ip()”,找到如下代码:public static function getIp() {static $ip = null;if (! $ip) {if (isset ( $_SERVER ['HTTP_X_FORWARDED_FOR'] ) && $_SERVER ['HTTP_X_FORWARDED_FOR'] && $_SERVER ['REMOTE_ADDR']) {
if (strstr ( $_SERVER ['HTTP_X_FORWARDED_FOR'], ',' )) {
$x = explode ( ',', $_SERVER ['HTTP_X_FORWARDED_FOR'] );
$_SERVER ['HTTP_X_FORWARDED_FOR'] = trim ( end ( $x ) );
}if (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'] ) && $_SERVER ['HTTP_CLIENT_IP'] && preg_match ( '/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER ['HTTP_CLIENT_IP'] )) {$ip = $_SERVER ['HTTP_CLIENT_IP'];
}
if (! $ip && preg_match ( '/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER ['REMOTE_ADDR'] )) {
$ip = $_SERVER ['REMOTE_ADDR'];
}! $ip && $ip = 'Unknown';
}
return $ip;}