我正在开发一个仅在企业本地网络上运行的 PHP 应用程序。该应用程序将使用自定义安装程序安装到服务器,就像我们使用 Stunnix Advanced Webserver 制作的一样。
作为使应用程序更加用户友好的一部分,我计划显示服务器的 本地 IP ,以便网络中的其他计算机只需在地址栏中键入此 IP 即可轻松访问该应用程序。
问题是我无法获取服务器的 本地 IP 。
我努力了
SERVER_NAME (仅显示 127.0.0.1)
REMOTE_ADDR (显示客户端外部 IP)
SERVER_ADDR 显示正确的 IP,但只有当我使用完全违背其目的的 IP 从客户端访问它时,它才会显示正确的 IP。
我只想在通过 http://localhost
本身直接从服务器访问时显示服务器的 本地 IP 。
我有点确定这是不可能的。但如果是,请帮助。
编辑
我正在开发一个跨平台的 PHP 服务器应用程序之类的东西。我们将 Apache、PHP 安装程序和 SQlite 数据库作为一键式安装程序与我们的 PHP 应用程序捆绑在一起,以使其尽可能对用户友好。任何人都可以将其部署在运行 Windows、Mac 或 Linux 的计算机上。安装后,当用户在服务器上打开应用程序时,他可以看到 ip 地址 [本地 ip] 和可用于连接到该服务器的端口。该应用程序将仅在本地网络上运行,而不会在 Internet 上运行。
它应该像名为 Air Droid 的 Android 应用程序一样显示本地 IP。截图: https ://lh3.ggpht.com/PmLopRm-Lj9WTnzm2MBI-bTbCLopAyqtd4C_4nvyDwLg8X0QwDbBbEREdWGHG5xku4s
原文由 ajaybc 发布,翻译遵循 CC BY-SA 4.0 许可协议
您在这里遇到的问题是这不是一条静态信息。任何给定的计算机都可以具有与多个网卡关联的多个 IP 地址。其中一些/全部/都没有可用的 Web 服务。对于您向操作系统提出的问题,可能没有单一的答案。
如果您的服务器有一个简单的单一 IP 地址配置,那么您最好对其进行硬编码——这是迄今为止最简单的选择。如果你想动态地确定它,这里有一些你希望会发现有用的信息:
$_SERVER['HTTP_HOST']
包含为了访问页面而在浏览器地址栏中输入的地址。如果您通过在浏览器中键入(例如)http://192.168.0.1/index.php
来访问该页面,$_SERVER['HTTP_HOST']
将是192.168.0.1
。gethostbyname($_SERVER['HTTP_HOST']);
会将 DNS 名称转换为 IP 地址。$_SERVER['SERVER_NAME']
包含已在 Web 服务器配置中配置的名称作为其服务器名称。如果你打算使用它,你还不如用 PHP 硬编码。$_SERVER['SERVER_ADDR']
将包含服务器主IP地址的操作系统。这可能是也可能不是用于访问页面的 IP 地址,也可能是也可能不是绑定了 Web 服务器的 IP 地址。它在很大程度上取决于操作系统和服务器配置。如果服务器只有一个 IP 地址,这 可能是 一个安全的选择,尽管在某些情况下这可能包含127.0.0.1
。总而言之,没有 100% 可靠的方法来确定 Web 服务器的保证工作 IP 地址,而不检查发送到 Web 服务器以生成您正在创建的页面的信息,如你说
totally defeats its purpose
。