如何在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']
我来到这个页面寻找一种获取我自己的IP地址的方法,而不是连接到我的远程机器.
这不适用于Windows机器.
但是如果有人搜索我要找的东西:
#! /usr/bin/php(无耻地改编自如何在Linux和OS X上获取本地计算机的主IP地址?)
5> Ben D..:这些最高投票的答案都不会可靠地返回服务器的公共地址.通常
$_SERVER['SERVER_ADDR']
是正确的,但如果您通过VPN访问服务器,它可能会返回内部网络地址而不是公共地址,即使不在同一网络上,某些配置也只是空白或有其他指定值.同样,有些情况下
$host= gethostname(); $ip = gethostbyname($host);
不会返回正确的值,因为它依赖于DNS(内部配置或外部记录)和服务器的主机名设置来推断服务器的IP地址.这两个步骤都可能存在缺陷.例如,如果服务器的主机名格式化为域名(即HOSTNAME=yahoo.com
)(那么至少在我的php5.4/Centos6设置上)gethostbyname
将直接跳过查找Yahoo.com的地址而不是本地服务器的地址.此外,由于
gethostbyname
回退到公共DNS记录,测试服务器具有未发布或不正确的公共DNS记录(例如,您通过localhost
IP地址访问服务器,或者如果您使用本地hosts
文件覆盖公共DNS ),那么您'将返回没有IP地址(它只会返回主机名)或更糟糕的是它将返回公共DNS记录中指定的错误地址(如果存在或者域名是否存在通配符).根据具体情况,您还可以通过以下方式尝试第三种方法:
$external_ip = exec('curl http://ipecho.net/plain; echo');这有其自身的缺陷(依赖于特定的第三方站点,并且可能存在通过不同主机或代理路由出站连接的网络设置),并且
gethostbyname
它可能很慢.老实说,我不确定哪种方法最常用,但要注意的一点是,特定的方案/配置会导致所有这些方法的输出不正确......所以如果可能,请验证您的方法是否正确使用返回您期望的值.
6> Emmanuel Mah..:这可以用作上述示例的改编,而不必担心服务器上安装的curl.
7> 小智..:检查$ _SERVER数组
echo $_SERVER['SERVER_ADDR'];
8> 小智..:如果您在bash shell中使用PHP,则可以使用:
$server_name=exec('hostname');因为
$_SERVER[] SERVER_ADDR
,HTTP_HOST
并SERVER_NAME
没有设定.