【发布时间】:2011-10-24 12:51:21
【问题描述】:
$_SERVER['SERVER_ADDR'] 是否始终设置?
我应该使用 isset() 检查还是没有必要?
我需要获取站点的 IP,以便确定它是否为 127.0.0.1/localhost
【问题讨论】:
标签: php isset superglobals
$_SERVER['SERVER_ADDR'] 是否始终设置?
我应该使用 isset() 检查还是没有必要?
我需要获取站点的 IP,以便确定它是否为 127.0.0.1/localhost
【问题讨论】:
标签: php isset superglobals
不,在CLI 中没有设置。所以并非总是如此。
$ php -r "echo $_SERVER['SERVER_ADDR'];"
(无输出)
如果您记录或报告了错误(基于您的 PHP.ini 设置),您也会收到以下消息:
PHP Notice: Undefined index: SERVER_ADDR in Command line code on line 1
【讨论】:
PHP Notice: Undefined index: SERVER_ADDR in Command line code on line 1
$_SERVER['SERVER_ADDR'] 不仅仅是一个空字符串,所以我决定确定:)
NULL。
isset($_SERVER['SERVER_ADDR']) === FALSE
它不会总是被设置。考虑到您甚至可以在没有服务器的情况下安装 PHP 并从命令行运行它。没有任何$_SERVER 变量的保证,但是如果您在服务器上尝试一次并且它可以工作,那么您可以打赌它将始终在该服务器配置上设置。您只需要在某处记下,如果您对服务器的配置进行了重大更改,或者切换服务器,您应该再次检查。
您还可以使用phpinfo()检查服务器变量的值
【讨论】:
CLI 是未设置的一个很好的示例,但所有 _SERVER 值都是由运行 php 的服务器设置的,因此取决于您使用的服务器及其配置,不能保证它无论如何都会设置。
【讨论】:
正如之前通过 cli 所说,它不可用。 以防万一您需要通过 cli 或 HTTP 调用知道 IP 地址,请考虑使用以下内容:
$IP = isset($_SERVER['SERVER_ADDR'])?$_SERVER['SERVER_ADDR']:gethostbyname(gethostname());
【讨论】: