Php 始终设置$服务器[';服务器地址';]吗?

Php 始终设置$服务器[';服务器地址';]吗?,php,isset,superglobals,Php,Isset,Superglobals,$\u服务器['SERVER\u ADDR']是否始终设置 我应该用isset()检查还是不需要 我需要获取站点的IP,这样我才能确定它是否为127.0.0.1/localhost否,在CLI中,它未设置。所以不总是这样 $ php -r "echo $_SERVER['SERVER_ADDR'];" (无输出) 如果您记录或报告了错误(基于PHP.ini设置),您也会收到以下消息: PHP Notice: Undefined index: SERVER_ADDR in Command lin

$\u服务器['SERVER\u ADDR']
是否始终设置

我应该用isset()检查还是不需要


我需要获取站点的IP,这样我才能确定它是否为127.0.0.1/localhost

否,在
CLI
中,它未设置。所以不总是这样

$ php -r "echo $_SERVER['SERVER_ADDR'];"
(无输出)

如果您记录或报告了错误(基于PHP.ini设置),您也会收到以下消息:

PHP Notice: Undefined index: SERVER_ADDR in Command line code on line 1

它不会总是被设定的。考虑您可以安装PHP,甚至没有服务器并从命令行运行它。任何
$\u服务器
变量都不能保证,但是如果您在服务器上尝试一次,并且它可以工作,那么您可以打赌它将始终在该服务器配置上设置。您只需要在某个地方记下,如果您对服务器的配置做了重大更改,或者切换了服务器,您应该再次检查


您还可以使用
phpinfo()

CLI检查服务器变量的值,这是一个很好的例子,说明未设置该变量,但所有
\u服务器
值都是由运行php的服务器设置的,因此取决于您使用的服务器及其配置,无法保证它会被设置。

正如前面通过cli所说的,它不可用。 以防万一您需要通过CLI或通过HTTP调用了解IP地址,请考虑使用如下内容:

$IP = isset($_SERVER['SERVER_ADDR'])?$_SERVER['SERVER_ADDR']:gethostbyname(gethostname());

为了确保这一点,有一个PHP通知:
PHP通知:未定义索引:命令行代码中的SERVER\u ADDR在第1行
我不确信
$\u SERVER['SERVER\u ADDR']
不仅仅是一个空字符串,所以我决定确保:)转换为字符串的未设置变量只是一个空字符串。更严格地说,这个变量就是
NULL
。啊,很有趣。因此,未定义的索引为空:)我可以更精确地说,我想确保
isset($\u SERVER['SERVER\u ADDR'])==FALSE