Php 只需找到服务器的ip地址
以下用于查找主机服务器的实际本地ip地址(例如,Php 只需找到服务器的ip地址,php,linux,apache,network-programming,Php,Linux,Apache,Network Programming,以下用于查找主机服务器的实际本地ip地址(例如,192.168.1.X)的代码在dev计算机上运行良好 $ip = getHostByName( getHostName() ); 将其传输到它开始输出的另一台服务器127.0.0.1 getHostName()似乎返回localhost,然后通过getHostByName()将其转换为127.0.0.1 看看这里的其他问题,似乎$\u SERVER['SERVER\u ADDR']可以解决这个难题,但这也返回了127.0.0.1 检查并搜索ph
192.168.1.X
)的代码在dev计算机上运行良好
$ip = getHostByName( getHostName() );
将其传输到它开始输出的另一台服务器127.0.0.1
getHostName()似乎返回localhost
,然后通过getHostByName()将其转换为127.0.0.1
看看这里的其他问题,似乎$\u SERVER['SERVER\u ADDR']
可以解决这个难题,但这也返回了127.0.0.1
检查并搜索phpinfo()
的输出不会返回机器实际ip地址的线索
说真的,有人知道获取运行脚本的机器的ip地址的防弹(越简单越好)方法吗?为什么不进行反向翻转就很难获得如此基础的数据
我真的不想在配置文件中硬编码ip地址…一般来说,这是不可能的-用于连接服务器的真实ip可能在它到达服务器之前被转换…如果需要所有接口列表,请尝试
system()
执行shell命令并将结果发送到web服务器。例如:
system('ifconfig', $LIP);
system('ipconfig', $WIP);
echo "Linux:".$LIP."<br>Win:".$WIP."<br>;
system('ifconfig',$LIP);
系统('ipconfig',$WIP);
echo“Linux:.$LIP.”
Win:.$WIP.
;
试试这个:
$ip = getHostByName( $_SERVER['HTTP_HOST'] );
它应该解析访问站点的主机用户的IP
例如,如果您通过http://localhost/
它将为您提供127.0.0.1。但是对于http://www.mydomain.tld/
它应该返回www.mydomain.tld的IP
请注意,
/etc/hosts
如果列出了域,则可能会影响名称解析。您的服务器是否在同一台计算机上的代理/负载平衡器/缓存后面运行,使localhost
或127.0.0.1
成为Apache运行的实际主机?您想要哪个IP地址,IP地址分配给机器上的NIC,或用于从internet访问机器的公共IP?@nikc否。但您认为这与apache有关?@zaf-您需要忘记服务器将要传递给PHP的任何内容(这将与请求的接口有关)然后开始显式地检查本地机器的网络详细信息。我不知道PHP是否对此有任何帮助,您可能需要退出并调用ifconfig
或ipconfig
,然后解析结果。请记住,这些结果的输出因平台而异(因此编写一个可移植的解析器并不有趣)机器可以在同一局域网上有多个接口(我想我曾经管理过一个网络的4个接口)@zaf通常的方法是忘记检查主机名/本地IP地址,只使用$\u SERVER
中的值。有效的HTTP/1.1请求包含构建用于访问页面的完整URL所需的所有信息,这是您应该使用的。您不想这样做有什么原因吗?我很抱歉对此消息感到惊讶。可能会使用类似的东西。但我需要在顶部添加一个缓存机制,以避免在每个请求上运行此功能。尝试检查is_文件('/webroot/sysconfig.txt');
如果为false:usesystem('ifconfig>/webroot/sysconfig.txt');
如果为true:通过文件获取内容读取sysconfig.txt($path);
通过这种方式,您可以轻松创建缓存机制;)是的,这是一种方式:)