如何在PHP中识别服务器IP地址

我如何识别PHP中的服务器IP地址?

像这样的服务器IP:

$_SERVER['SERVER_ADDR']; 

这是港口

 $_SERVER['SERVER_PORT']; 

如果您使用PHP 5.3或更高版本,则可以执行以下操作:

 $host= gethostname(); $ip = gethostbyname($host); 

当你运行一个独立的脚本,而不是通过Web服务器运行时,这个效果很好。

例如:

 $_SERVER['SERVER_ADDR'] 

当你在IIS上,尝试:

 $_SERVER['LOCAL_ADDR'] 

最新的答案都不会可靠地返回服务器的公共地址。 通常$_SERVER['SERVER_ADDR']是正确的,但是如果你通过VPN访问服务器,它可能会返回内部networking地址,而不是公共地址,即使不在同一个networking上,一些configuration将会简单空白或有其他指定的价值。

同样,有些情况下$host= gethostname(); $ip = gethostbyname($host); $host= gethostname(); $ip = gethostbyname($host); 将不会返回正确的值,因为它依赖于DNS(内部configuration的或外部logging)和服务器的主机名设置来推断服务器的IP地址。 这两个步骤都可能有问题。 例如,如果服务器的主机名被格式化为域名(即HOSTNAME=yahoo.com ),那么(至less在我的php5.4 / Centos6设置) gethostbyname将跳过直接find雅虎的地址,而不是本地服务器。

此外,由于gethostbyname会在公有DNSlogging上回退包含未公布的或不正确的公共DNSlogging的testing服务器(例如,您正在通过localhost或IP地址访问服务器,或者如果您使用本地hosts文件覆盖公共DNS)那么你将得到没有IP地址(它只会返回主机名),甚至更糟的是它会返回在公共DNSlogging中指定的错误地址(如果存在的话)或者域名是否有通配符。

根据情况,你也可以尝试第三种方法:

 $external_ip = exec('curl http://ipecho.net/plain; echo'); 

这有其自身的缺陷(依赖于特定的第三方网站,可能有networking设置,通过不同的主机或代理路由出站连接),并像gethostbyname它可能是缓慢的。 我真的不确定哪种方法最经常是正确的,但要记住的一点是,特定的场景/configuration会导致所有这些方法的输出不正确,所以如果可能的话,请validation您的方法使用正在返回您所期望的值。

检查$ _SERVER数组

 echo $_SERVER['SERVER_ADDR']; 

以前的答案都给$ _SERVER ['SERVER_ADDR']。 这在一些IIS安装上不起作用。 如果您希望在IIS上使用此function,请使用以下命令:

 $server_ip = gethostbyname($_SERVER['SERVER_NAME']); 

如果你在bash shell中使用PHP,你可以使用:

 $server_name=exec('hostname'); 

因为$_SERVER[] SERVER_ADDRHTTP_HOSTSERVER_NAME未设置。

我刚刚创build了一个简单的脚本,它将带回IIS中的$ _SERVER ['REMOTE_ADDR']和$ _SERVER ['SERVER_ADDR'],因此您不必更改每个variables。 只需将此文本粘贴到每个页面中包含的php文件中即可。

 /** IIS IP Check **/ if(!$_SERVER['SERVER_ADDR']){ $_SERVER['SERVER_ADDR'] = $_SERVER['LOCAL_ADDR']; } if(!$_SERVER['REMOTE_ADDR']){ $_SERVER['REMOTE_ADDR'] = $_SERVER['LOCAL_ADDR']; } 

我来到这个页面寻找一个获得我自己的IP地址的方式,而不是连接到我的远程机器的一个。

这不适用于Windows机器。

但是,如果有人search我正在寻找的东西:

 #! /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; 

(无耻地改编自如何获得Linux和OS X本地计算机的主要IP地址? )

 $serverIP = $_SERVER["SERVER_ADDR"]; echo "Server IP is: <b>{$serverIP}</b>"; 

你可能不得不使用$HTTP_SERVER_VARS['server_ADDR']如果你没有从上面的答案得到任何东西,并且如果您使用旧版本的PHP

我发现这为我工作:GetHostByName(“”);

在运行Apache webserver的Windows 7上运行XAMPP v1.7.1。 不幸的是,它只是给我的网关IP地址。

这就是你可以使用上面的例子,而不用担心在你的服务器上安装curl。

 <?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); ?> 

喜欢这个:

 $_SERVER['SERVER_ADDR']; 

检查$ _SERVER数组

 echo $_SERVER['SERVER_ADDR'];