如何在PHP中识别服务器IP地址?
答案 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_ADDR
,HTTP_HOST
和SERVER_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'];