Hai Guys, 如何使用PHP获取我的用户的万能地址....
答案 0 :(得分:6)
我发现最好的选择是使用最新的WhatIsMyIPAddress API,http://bot.whatismyipaddress.com,建议每5分钟使用一次查询[Source]。它以纯文本形式返回WAN IP,因此使用
file_get_contents("http://bot.whatismyipaddress.com");
将轻松获取IP,无需任何后期解析。
答案 1 :(得分:2)
$ _ SERVER ['REMOTE_ADDR']将为您提供发出HTTP请求的IP。如果您将“用户”称为浏览您网站的人,那么这很可能就是您所寻找的。 p>
如果您指的是“执行用户”所拥有的WAN IP,您可以使用以下行获取服务器的WAN IP
$ WANIP =的file_get_contents( “http://www.whatismyip.com/automation/n09230945.asp”);
请记住,这会使与ahismyip.com建立DNS和HTTP连接,从而减慢您的网站速度。
答案 2 :(得分:1)
在典型的局域网设置中,整个局域网通过路由器连接到互联网,局域网中的每台计算机都将共享一个“外部”WAN IP(分配给路由器),但每个计算机都有一个“内部”,LAN IP(通常为192.168。。)。
在这种情况下,该LAN上任何计算机的所有外部请求似乎都来自同一WAN IP。单独的路由器会知道请求所属的LAN上的哪台计算机,因此您的PHP无法检测到LAN IP,只能检测WAN IP(通过$ _SERVER ['REMOTE_ADDR']元素)< / p>
如果请求是内部的(比如说同一局域网上的HTTP服务器),$ _SERVER ['REMOTE_ADDR']元素将保留发出请求的计算机的LAN IP。
简而言之,服务器只知道发送请求的设备的IP,无论该IP是属于LAN,WAN还是任何其他类型的网络。
答案 3 :(得分:0)
我使用whatismyip.com来获取此信息。我不会在生产中使用它,但我将它用于集成测试(特别是,Paypal IPN不能与localhost一起使用,并且需要通过WAN IP设置端口转发)。
(请注意他们的使用政策!http://www.whatismyip.com/faq/automation.asp)
function getWANIP() {
$url = "http://automation.whatismyip.com/n09230945.asp";
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0");
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt( $ch, CURLOPT_ENCODING, "UTF-8");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//UNCOMMENT TO DEBUG TO output.tmp
//curl_setopt($ch, CURLOPT_VERBOSE, true); // Display communication with server
//$fp = fopen("output.tmp", "w");
//curl_setopt($ch, CURLOPT_STDERR, $fp); // Display communication with server
$response = curl_exec($ch);
curl_close($ch);
if ( $response === FALSE ) {
throw new Exception("Error while retrieving server data: " . curl_error($ch));
}
return $response;
}