PHP - 获取公共 IP
问题的出现原因:使用$_SERVER['REMOTE_ADDR']可以获取公共IP,但如果确保获取的是正确的IP而不是代理IP,则需要使用其他方法。
解决方法:可以使用get_real_ip()函数来获取真实的IP地址。该函数通过判断$_SERVER中的不同HTTP头部字段来获取真实IP,包括HTTP_CLIENT_IP、HTTP_X_FORWARDED_FOR、HTTP_X_FORWARDED、HTTP_FORWARDED_FOR和HTTP_FORWARDED。如果这些字段都不存在,则返回$_SERVER['REMOTE_ADDR']。
值得注意的是,$_SERVER["HTTP_*"]变量都可以很容易地进行欺骗,因此可以将$_SERVER['REMOTE_ADDR']和其他可用的HTTP头部字段一起存储以确保获取真实IP。
以下是获取真实IP的PHP代码:
function get_real_ip() { if (isset($_SERVER["HTTP_CLIENT_IP"])) { return $_SERVER["HTTP_CLIENT_IP"]; } elseif (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) { return $_SERVER["HTTP_X_FORWARDED_FOR"]; } elseif (isset($_SERVER["HTTP_X_FORWARDED"])) { return $_SERVER["HTTP_X_FORWARDED"]; } elseif (isset($_SERVER["HTTP_FORWARDED_FOR"])) { return $_SERVER["HTTP_FORWARDED_FOR"]; } elseif (isset($_SERVER["HTTP_FORWARDED"])) { return $_SERVER["HTTP_FORWARDED"]; } else { return $_SERVER["REMOTE_ADDR"]; } }
然而,需要注意的是,这些代码容易被滥用,因此请谨慎使用。
在PHP中获取公共IP地址的方法有多种,但并不一定可靠。可以使用$_SERVER["REMOTE_ADDR"]
来获取,但这种方法并不完全可信。因为$_SERVER["REMOTE_ADDR"]
可能返回代理服务器的地址,而不是远程用户的地址。例如,如果使用了nginx作为apache的代理服务器,那么apache接收到的$_SERVER["REMOTE_ADDR"]
就是nginx服务器的地址。
要获取真正的公共IP地址,可以考虑使用其他方法。例如,可以使用第三方服务来获取公共IP地址。下面是一个示例代码,使用了ipify.org这个服务来获取公共IP地址:
$public_ip = file_get_contents("https://api.ipify.org"); echo $public_ip;
使用这种方法,可以确保获取的是真正的公共IP地址,而不是代理服务器的地址。
总结一下,使用$_SERVER["REMOTE_ADDR"]
可以获取到公共IP地址,但不一定可靠。为了确保获取到真正的公共IP地址,可以考虑使用第三方服务来获取。以上示例代码使用了ipify.org这个服务来获取公共IP地址。
尝试使用$_SERVER['REMOTE_ADDR']
获取用户的IP地址。
http://php.net/manual/en/reserved.variables.server.php
在我的本地站点上,我得到的是127.0.0.1。我不能在我的本地站点上获取我的公共IP地址。
问题出现的原因:在本地站点上使用$_SERVER['REMOTE_ADDR']
获取的是本地IP地址(如127.0.0.1),而不是公共IP地址。
解决方法:通过使用第三方服务来获取公共IP地址。
以下是一个示例代码,使用了ipify服务来获取公共IP地址:
$ip = file_get_contents("https://api.ipify.org"); echo $ip;
这段代码使用了file_get_contents函数来向ipify服务发出请求,并将返回的公共IP地址存储在$ip变量中,最后通过echo语句将其输出。
使用该方法可以解决在本地站点上无法获取公共IP地址的问题。