【发布时间】:2012-02-01 12:40:14
【问题描述】:
以下用于查找主机服务器的实际本地 IP 地址(例如192.168.1.X)的代码在开发机器上运行良好
$ip = getHostByName( getHostName() );
将它转移到另一个服务器它开始输出127.0.0.1
getHostName() 似乎返回 localhost,而后者又被 getHostByName() 转换为 127.0.0.1。
在这里查看其他问题,$_SERVER['SERVER_ADDR'] 似乎可以解决这个难题,但这也返回了127.0.0.1
检查和搜索来自phpinfo() 的输出不会返回机器实际IP 地址的任何线索。
说真的,有人知道获取运行脚本的机器的 IP 地址的防弹(越简单越好)方法吗?为什么不做后空翻就很难得到这样的基础数据?
我真的不想在配置文件中硬编码 IP 地址...
【问题讨论】:
-
您的服务器是否在同一台机器上的代理/负载均衡器/缓存后面运行,使
localhost或127.0.0.1成为Apache 正在 运行的实际主机? -
您想要哪个 IP 地址,分配给机器上 NIC 的 IP 地址,还是用于从 Internet 访问机器的公共 IP?
-
@nikc 没有。但你认为它与 apache 有关吗?
-
@zaf — 您需要忘记服务器将传递给 PHP 的任何内容(这将是关于请求进入的接口)并开始明确检查本地计算机的网络详细信息.我不知道 PHP 是否对此有任何帮助,您可能需要掏空并调用
ifconfig或ipconfig然后解析结果。请记住,这些输出因平台而异(因此编写便携式解析器不会很有趣),并且机器可以在同一个 LAN 上有多个接口(我想我曾经管理 4 个接口到一个网络)。 -
@zaf 通常的方法是忘记检查主机名/本地 IP 地址,而只使用来自
$_SERVER的值。有效的 HTTP/1.1 请求包含构建用于访问页面的完整 URL 所需的所有信息,这就是您应该使用的。你有什么不想这样做的原因吗?
标签: php linux apache network-programming