如何在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_ADDR
, HTTP_HOST
和SERVER_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'];