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

时间:2011-04-27 07:45:57

标签: php ip

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

15 个答案:

答案 0 :(得分:163)

对于服务器ip来说就像这样:

$_SERVER['SERVER_ADDR'];

这是端口

$_SERVER['SERVER_PORT'];

答案 1 :(得分:90)

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

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

当您运行独立脚本而不是通过Web服务器运行时,这很有效。

答案 2 :(得分:18)

例如:

$_SERVER['SERVER_ADDR']

当您在IIS上时,请尝试:

$_SERVER['LOCAL_ADDR']

答案 3 :(得分:11)

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

这对Windows机器无效。

但是如果有人搜索我要找的东西:

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

(无耻地改编自How to I get the primary IP address of the local machine on Linux and OS X?

答案 4 :(得分:10)

最高投票的答案都不会可靠地返回服务器的公共地址。通常$_SERVER['SERVER_ADDR']是正确的,但如果您通过VPN访问服务器,它可能会返回内部网络地址而不是公共地址,即使不在同一网络上,某些配置也只会为空或具有其他指定值。

同样,在某些情况下,$host= gethostname(); $ip = gethostbyname($host);无法返回正确的值,因为它依赖于DNS(内部配置或外部记录)和服务器的主机名用于推断服务器IP地址的设置。这两个步骤都可能存在缺陷。例如,如果服务器的主机名格式化为域名(即HOSTNAME=yahoo.com),那么(至少在我的php5.4 / Centos6设置上)gethostbyname将直接跳过查找Yahoo.com&# 39; s地址而不是本地服务器。

此外,由于gethostbyname回退到公共DNS记录,测试服务器具有未发布或不正确的公共DNS记录(例如,您通过localhost或IP地址访问服务器,或者如果您使用本地hosts文件覆盖公共DNS,那么您将返回无IP地址(它只会返回主机名),或者更糟糕的是它将返回指定的错误地址公共DNS记录(如果存在)或域名是否为通配符。

根据具体情况,你也可以通过这样的方式尝试第三种方法:

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

这有其自身的缺陷(依赖于特定的第三方网站,并且可能存在通过不同主机或代理路由出站连接的网络设置),而gethostbyname可能会很慢。老实说,我不确定哪种方法最常使用,但需要深思的教训是,特定的方案/配置会导致所有这些方法的输出不正确...所以如果可能,请验证您的方法#39;重新使用是返回你期望的值。

答案 5 :(得分:9)

这可以用作上述示例的改编版,而不必担心服务器上安装了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);
    ?>

答案 6 :(得分:5)

检查$_SERVER阵列

echo $_SERVER['SERVER_ADDR'];

答案 7 :(得分:5)

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

$server_name=exec('hostname');

由于$_SERVER[] SERVER_ADDRHTTP_HOSTSERVER_NAME未设置。

答案 8 :(得分:4)

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

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

答案 9 :(得分:2)

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

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

答案 10 :(得分:1)

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

答案 11 :(得分:1)

如果您没有从上述答案中获得任何内容,并且您使用的是旧版本的PHP,则可能必须使用$HTTP_SERVER_VARS['server_ADDR']

答案 12 :(得分:1)

我发现这对我有用: 的gethostbyname( “”);

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

答案 13 :(得分:-1)

检查$ _SERVER数组

echo $_SERVER['SERVER_ADDR'];

答案 14 :(得分:-2)

像这样:

$_SERVER['SERVER_ADDR'];