【问题标题】:getenv("PHP_SELF") returning falsegetenv("PHP_SELF") 返回 false
【发布时间】:2014-05-03 00:33:24
【问题描述】:

为什么getenv("PHP_SELF") 会返回false

$_SERVER['PHP_SELF'] 正在工作并返回一个

【问题讨论】:

  • 你使用的是哪个环境?
  • 这应该可以,请展示你如何测试它。
  • @sunny Linux 和 Mac 环境,均返回false
  • @Anriëtte 。我已经为您的问题提供了答案,希望对您有所帮助。
  • 删除称呼:“提前谢谢。”,下次请不要这样做

标签: php environment-variables


【解决方案1】:

这是因为 getenv() 不等于 $_SERVER 取消引用。即:并非所有来自 $_SERVER 的键都可用于 getenv() 并且并非所有键具有相同的名称。

第一个重要区别是getenv() 将以不区分大小写的方式进行搜索。例如,这两个调用将返回相同的数据:

$script = getenv('SCRIPT_NAMe');
$script = getenv('SCRIPT_NAME');

其次,关于PHP_SELF:这不是将由环境设置的键。因为这个键在环境中有另一个名字(或者确切地说是含义),它是SCRIPT_NAMEgetenv() 将使用预定义的键列表,这些键大多在RFC 3875 中列出

因此,如果您想使用 getenv() - 您应该使用 SCRIPT_NAME 来引用当前脚本名称。请注意,在某些 情况下,此环境密钥可能 已设置(因此您可以这样做getenv('PHP_SELF')) - 但在常见情况下您不应该依赖它。 p>

【讨论】:

    【解决方案2】:

    好的。实际上,问题在于 getenv() 不接受“PHP_SELF”作为论据。 或者,您可以使用-

    $ip=getenv('REQUEST_URI');
    
    print_r($ip);
    

    这将为您提供所需的结果。希望对你有帮助。

    【讨论】:

      【解决方案3】:

      请注意getenv(或$_ENVthese are identical)和$_SERVER可访问的值之间有a slight difference

      • $_ENV 可以直接访问当前进程的环境变量,这是来自操作系统的东西。

      • $_SERVER 允许访问来自from the webserver 的其他执行信息。

      这些数组的填充方式取决于 PHP 的执行方式。有不同的方式主要是apache-module和cgi。在这两种情况下,超全局变量的填充方式可能非常不同。

      最好在$_SERVER 上构建脚本,这些脚本在网络服务器的上下文中运行,因为这通常包含更多关于 PHP 的信息,而这些信息实际上是需要的。如果您开发应该在命令行上运行的 php 应用程序,您可能更希望使用 $_ENV 来更好地控制环境。

      【讨论】:

        猜你喜欢
        • 2020-12-27
        • 2019-08-09
        • 2016-04-26
        • 2015-12-09
        • 2020-11-25
        • 1970-01-01
        • 2017-01-08
        • 1970-01-01
        • 2011-03-29
        相关资源
        最近更新 更多