为什么fopen()给我一个不同的IP而不是$ _SERVER ['SERVER_ADDR']?

时间:2012-10-05 04:20:31

标签: php ip ip-address fopen

使用此代码:

在服务器A上我有这个:

$handle = fopen('http://www.server_b.com/get_ip.php', 'r'); //This is just a PHP file that echoes the REMOTE_ADDR
echo "IP looks like ".fread($handle, '100000')." to external server.\n";
fclose($handle);
echo "IP looks like ".$_SERVER['SERVER_ADDR']." to this server.";
服务器B上的

我有:

echo $_SERVER['REMOTE_ADDR'];

我从服务器A获得以下输出:

IP looks like xxx.xxx.223.90 to external server. //xxx.xxx on both lines are the same
IP looks like xxx.xxx.223.94 to this server.

为什么我会获得两种不同的IP?注意,我们拥有.90-.94

的IP范围

1 个答案:

答案 0 :(得分:1)

由于它是VPS,您在server_b上可能看到的是运行server_a的VPS主机的IP地址。

或者,或者还有一些其他的代理机制正在进行中。

可能有办法解决这个问题:

在server_b上执行print_r() $_SERVER

根据所涉及的各种服务器的配置,除了REMOTE_ADDR之外,您还可以获得类似$_SERVER['HTTP_FORWARDED']的值。这将是代理传递的原始机器的IP地址,应该是您期望的那个。

这个问题可能会对您有所帮助:What is the most accurate way to retrieve a user's correct IP address in PHP?