如何在PHP中标识服务器IP地址?如何在PHP中标识服务器IP地址
回答
喜欢本作的服务器IP:
$_SERVER['SERVER_ADDR'];
,这为港口
$_SERVER['SERVER_PORT'];
否。在某些共享主机上返回:: 1 – TheRealChx101 2014-08-02 06:18:00
这可能不正确,这取决于Web服务器前面使用的负载平衡器。在这种情况下,您还需要X-Forwarded-For标头:http://en.wikipedia.org/wiki/X-Forwarded-For – Ligemer 2014-08-25 23:04:17
这不是服务器地址!这是* remote *浏览器调用远程用户控制的服务器的地址。使用由'约翰K'的答案而不是 – Ariel 2015-02-12 10:36:26
例如:
$_SERVER['SERVER_ADDR']
当你在IIS上,尝试:
$_SERVER['LOCAL_ADDR']
当PHP作为CGI模块运行时,$ _SERVER ['LOCAL_ADDR']'仅在IIS下可用。 – 2011-04-27 07:58:07
@rudi_visser它也适用于fastcgi,但是如果通过locahost连接,则返回:: 1返回。如果通过服务器的名称或IP连接,则会返回真实的IP。 – starbeamrainbowlabs 2012-07-21 14:01:49
@starbeamrainbowlabs FastCGI *是* CGI :)我的意思是与作为ISAPI模块运行形成鲜明对比,这是在FastCGI作为稳定平台出现之前编写的。 – 2012-07-21 17:54:49
检查$_SERVER阵列
echo $_SERVER['SERVER_ADDR'];
像这样:
$_SERVER['SERVER_ADDR'];
$serverIP = $_SERVER["SERVER_ADDR"];
echo "Server IP is: <b>{$serverIP}</b>";
以前的答案都给予$ _ SERVER [ 'SERVER_ADDR']。这在一些IIS安装上不起作用。如果你想这在IIS上工作,那么使用以下命令:
$server_ip = gethostbyname($_SERVER['SERVER_NAME']);
您可能需要使用$HTTP_SERVER_VARS['server_ADDR']
,如果你没有得到上面的答案什么,如果你正在使用PHP
我发现这对我有用: GetHostByName(“”);
在运行Apache webserver的Windows 7上运行XAMPP v1.7.1。 不幸的是,它只是给我的网关IP地址。
检查$ _ SERVER数组
echo $_SERVER['SERVER_ADDR'];
这并没有找到“真正的IP”,它发现任何人可能设置的***任意,未经验证的HTTP头,任何人都可能用它来欺骗他们的IP,如果你喜欢他们。如果客户端位于代理服务器后面,那么不要相信任何HTTP头文件。这也不符合这个问题。 – deceze 2013-04-03 10:15:04
无法确定这个答案如何不符合问题。问题是:“我如何识别PHP中的服务器IP地址?”。 OP应该学会如何更好地提问,或者你应该学习如何阅读问题。此外,如果客户端位于代理服务器后面,无论您尝试从服务器端进行尝试,仍然会受到干扰。完全不同的情况是服务器位于代理之后,因为您可以使用X-FORWARDED-FOR标头进行检查。 – 2014-05-20 15:14:20
我刚刚创建一个简单的脚本,将带回$ _ SERVER [“REMOTE_ADDR”]和$ _ SERVER [“SERVER_ADDR”]在IIS,所以你不必改变每个变量。只需将此文本粘贴到每个页面中包含的php文件中即可。
/** IIS IP Check **/
if(!$_SERVER['SERVER_ADDR']){ $_SERVER['SERVER_ADDR'] = $_SERVER['LOCAL_ADDR']; }
if(!$_SERVER['REMOTE_ADDR']){ $_SERVER['REMOTE_ADDR'] = $_SERVER['LOCAL_ADDR']; }
如果使用在bash PHP壳,您可以使用:
$server_name=exec('hostname');
因为$_SERVER[] SERVER_ADDR
,HTTP_HOST
和SERVER_NAME
未设置。
最新的投票答案都不会可靠地返回服务器的公共地址。通常$_SERVER['SERVER_ADDR']
将是正确的,但是如果您通过VPN访问服务器,它可能会返回内部网络地址而不是公共地址,即使不在同一网络上,某些配置将只会是空白或其他一些配置指定值。
同样,有些情况下$host= gethostname(); $ip = gethostbyname($host);
不会返回正确的值,因为它依靠DNS(内部配置的或外部记录)和服务器的主机名设置来推断服务器的IP地址。这两个步骤都可能有问题。例如,如果服务器的主机名被格式化为域名(即HOSTNAME=yahoo.com
),那么(至少在我的php5.4/Centos6设置中)gethostbyname
将跳过直接找到Yahoo.com的地址而不是本地服务器的地址。
此外,由于gethostbyname
倒在公共DNS记录了测试服务器,与未公开的或不正确的公共DNS记录(例如,你被localhost
或IP地址访问服务器,或者如果你正在使用覆盖公共DNS您当地的hosts
文件),那么你将得到没有IP地址(它只会返回主机名),或者更糟糕的是,它会返回公共DNS记录中指定的错误地址(如果存在的话)或域名是否有通配符。
根据不同的情况,你也可以通过做这样的尝试第三种方法:
$external_ip = exec('curl http://ipecho.net/plain; echo');
这有其自身的缺陷(依赖于特定的第三方网站,并有可能是网络设置该路由通过不同的主机或代理路由出站连接)并且像gethostbyname
那样可能会很慢。我真的不确定哪种方法最经常是正确的,但要记住的一点是,特定的场景/配置会导致所有这些方法的错误输出......因此,如果可能的话,请验证您的方法使用正在返回您期望的值。
我来到这个页面寻找一种让我自己的IP地址不是连接到我的远程机器的方式。
这不适用于Windows机器。
但如果有人搜索我一直在寻找:
#! /usr/bin/php
<?php
$my_current_ip=exec("ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'");
echo $my_current_ip;
(从How to I get the primary IP address of the local machine on Linux and OS X?无耻改编)
这是从shell运行PHP脚本时实际工作的唯一选项。问题:当有多个活动接口时,如何决定返回哪个地址?我测试了有线和无线以太网连接处于活动状态,然后仅使用无线活动,并且两次都返回wlan ip。好剧本,谢谢! – 2017-05-20 18:18:37
它实际上并不知道要返回哪一个。它只是从ifconfig的输出中返回最后一个inet接口,但忽略127.0.0.1。如果你只有“常用”接口,那么它的表现相当不错。如果你指定你想要的接口“ifconfig wlan0 | ...”,这可能是最安全的。这个脚本绝不是完美的,但它可以在简单的设置中工作,它演示了如何在原则上做到这一点,以便根据需要进行调整。 – Dominic 2017-05-24 07:36:34
ifconfig | grep'inet addr'| cut -d':'-f 2 | awk'{print $ 1}'| grep -vE'^(192 \ .168 | 10 \。| 172 \ .1 [6789] \。| 172 \ .2 [0-9] \。| 172 \ .3 [01] \。| 127 \。 )'是我对此的最新修订。它过滤掉所有本地ips,只给你外部 – Dominic 2017-11-14 13:20:46
这是你可以为上面的例子适应用什么,而不必担心卷曲安装在你的服务器上。
<?php
// create a new cURL resource
$ch = curl_init();
// set URL and other appropriate options
curl_setopt ($ch, CURLOPT_URL, "http://ipecho.net/plain");
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
// grab URL and pass it to the browser
$ip = curl_exec ($ch);
echo "The public ip for this server is: $ip";
// close cURL resource, and free up system resources
curl_close ($ch);
?>
- 1. PHP显示服务器IP地址
- 2. PHP curl,检索服务器IP地址
- 3. 如何获取服务器IP地址?
- 4. 服务器的IP地址
- 5. DNS服务器IP地址
- 6. tcp服务器ip地址
- 7. 任何网络服务器可以识别私人IP地址
- 8. 在PHP中获取服务器的主机名或IP地址
- 9. 如何在EJB中查找服务器的IP地址
- 10. 如何在.NET中获取服务器的IP地址?
- 11. 如何在PHP(CLI)中查找我的服务器的IP地址
- 12. 如何在php中找到重定向服务器的IP地址
- 13. 在WCF服务中记录IP地址
- 14. Appengine服务器的IP地址块?
- 15. 查找服务器的IP地址
- 16. Google Cloud Messaging服务器的IP地址
- 17. 获取服务器IP地址
- 18. 获取IP地址当前服务器
- 19. 如何在php中获得IP地址
- 20. Ansible使用代理服务器本地IP地址,如何“绕过本地地址的代理服务器”
- 21. 如何在rails上获取主机服务器的IP地址
- 22. 如何在Windows登录前为服务器分配IP地址
- 23. 如何获取asp.net中的服务器/网站IP地址?
- 24. 如何从SQL Server 2005中查询服务器的IP地址?
- 25. 如何获得自定义HostnameVerifier中的服务器IP地址
- 26. 如何获取使用PHP的服务器的本地IP地址?
- 27. 如何查找Mac机器的DNS服务器IP地址?
- 28. 如何从IP地址获取服务器的机器名称?
- 29. IP地址服务器块已结束域服务器块
- 30. 在PHP中的IP地址
你的意思是请求的IP地址或运行你的应用程序的机器的IP? – wosis 2011-04-27 07:48:19