Php 浏览器是否保护用户的IP地址?

Php 浏览器是否保护用户的IP地址?,php,mysql,web,Php,Mysql,Web,我正在用PHP编写代码,我想检测客户端的IP地址。 我一直在使用$\u SERVER['REMOTE\u ADDR'] 它通常起作用。。。但有时我会得到地址127.255.255.255,很明显,一个正常上网的用户试图连接这个网站。有什么原因吗?127.255.255.255是从您的内部服务器进行的广播(环回) 如果您确定它是外部用户,您应该检查站点上的可能性。要回答标题中的问题: 远程地址由相应的Web服务器设置,用户无法修改(使用代理等除外)。它是在任何HTTP发生之前根据传入的TCP连接确

我正在用PHP编写代码,我想检测客户端的IP地址。 我一直在使用$\u SERVER['REMOTE\u ADDR']


它通常起作用。。。但有时我会得到地址127.255.255.255,很明显,一个正常上网的用户试图连接这个网站。有什么原因吗?

127.255.255.255
是从您的内部服务器进行的广播(环回)


如果您确定它是外部用户,您应该检查站点上的可能性。

要回答标题中的问题: 远程地址由相应的Web服务器设置,用户无法修改(使用代理等除外)。它是在任何HTTP发生之前根据传入的TCP连接确定的

但是,它可能会被服务器网络中的某些防火墙或代理混淆


另外令人困惑的是,127.255.255.255是一个广播地址,不应该是HTTP连接(即TCP,仅限单播)的源。

问题不在您要查找的位置。事实上,当您使用
inet\u aton
在mysql中存储
$\u SERVER['REMOTE\u ADDR']
时,必须确保该列定义为
int(11)unsigned

如果您的列是带符号的
int
,则数据将被截断,并且所有大于127.255.255.255的IP地址都将保存为带符号的

您需要在mysql表上运行此查询(更改表和列名):


问题是ip2long将返回一个大到4294967295的数字(对于255.255.255.255),并且您的INT-MySQL字段(如果已签名)接受最大值2147483647(源:),因此任何高于2147483647的值都将存储为2147483647。这就是为什么数据库中有很多127.255.255.255


我想将数据库列转换为BIGINT或unsigned INT可以解决这一问题,但要注意,ip2long()的某些实现(我认为是32位vs 64位)将返回负数

您正在运行什么web服务器?不,我实际上不确定,我正在使用webhubhosting.com。您应该与他们核实是否使用代理或其他什么,以及为什么您可以获得广播地址(127.255.255.255)作为客户端的远程地址。正如这里的另一位用户所说,REMOTE_ADDR变量是由Web服务器设置的,它使用接收请求的IP地址运行PHP脚本。但为什么它对某些地址有效,而对其他地址无效?这很奇怪。您是否有使用
[P]
标志的
.htaccess
文件中的重写规则?你自己可能在代理一些页面?
ALTER TABLE  `stats` CHANGE `ip` `ip` INT( 11 ) UNSIGNED;