【问题标题】:Is $_SERVER['SERVER_ADDR'] always set?$_SERVER['SERVER_ADDR'] 是否总是设置?
【发布时间】:2011-10-24 12:51:21
【问题描述】:

$_SERVER['SERVER_ADDR'] 是否始终设置?

我应该使用 isset() 检查还是没有必要?

我需要获取站点的 IP,以便确定它是否为 127.0.0.1/localhost

【问题讨论】:

    标签: php isset superglobals


    【解决方案1】:

    不,在CLI 中没有设置。所以并非总是如此。

    $ php -r "echo $_SERVER['SERVER_ADDR'];"
    

    (无输出)

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

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

    【讨论】:

    • 为了让可疑人员绝对确定这一点,有一个 PHP 通知:PHP Notice: Undefined index: SERVER_ADDR in Command line code on line 1
    • 我不相信$_SERVER['SERVER_ADDR'] 不仅仅是一个空字符串,所以我决定确定:)
    • 转换为字符串的未设置变量只是一个空字符串。更严格地说,变量只是NULL
    • 啊,有趣。所以未定义的索引是 NULL :) 我本来可以更准确地说我想确保 isset($_SERVER['SERVER_ADDR']) === FALSE
    【解决方案2】:

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

    您还可以使用phpinfo()检查服务器变量的值

    【讨论】:

      【解决方案3】:

      CLI 是未设置的一个很好的示例,但所有 _SERVER 值都是由运行 php 的服务器设置的,因此取决于您使用的服务器及其配置,不能保证它无论如何都会设置。

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2011-03-13
          • 2015-07-30
          • 2011-09-21
          • 2010-12-24
          • 2013-06-19
          • 1970-01-01
          • 1970-01-01
          • 2012-05-27
          • 2021-06-04
          相关资源
          最近更新 更多