Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 只需找到服务器的ip地址_Php_Linux_Apache_Network Programming - Fatal编程技术网

Php 只需找到服务器的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

以下用于查找主机服务器的实际本地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

检查并搜索
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:use
system('ifconfig>/webroot/sysconfig.txt');
如果为true:通过
文件获取内容读取sysconfig.txt($path);
通过这种方式,您可以轻松创建缓存机制;)是的,这是一种方式:)