php - 为什么我的 $_ENV 是空的?

标签 php apache environment-variables

我正在运行Apache/2.2.11 (Win32) PHP/5.3.0我在 .htaccess 文件中执行了以下操作:

SetEnv FOO bar

如果我打印出$_ENV PHP 文件中的变量,我得到一个空数组。为什么我的环境变量没有出现在那里?为什么它首先是空的?

虽然我确实找到了我的变量,但它出现在 $_SERVER 中多变的。由于某种原因,它出现了两次。这是为什么?

[REDIRECT_FOO] => bar
[FOO] => bar

看来我可以使用 getenv('FOO') 来获取它,所以也许我应该用它来代替。但我还是有点好奇到底是什么原因造成的。这是 Windows 问题吗?或者说发生了什么?

最佳答案

事实证明这里有两个问题:

<强>1。 $_ENV 仅在 php.ini 允许的情况下才会填充,默认情况下似乎不会这样做,至少在默认的 WAMP server 中不会。安装。

; This directive determines which super global arrays are registered when PHP
; starts up. If the register_globals directive is enabled, it also determines
; what order variables are populated into the global space. G,P,C,E & S are
; abbreviations for the following respective super globals: GET, POST, COOKIE,
; ENV and SERVER. There is a performance penalty paid for the registration of
; these arrays and because ENV is not as commonly used as the others, ENV is
; is not recommended on productions servers. You can still get access to
; the environment variables through getenv() should you need to.
; Default Value: "EGPCS"
; Development Value: "GPCS"
; Production Value: "GPCS";
; http://php.net/variables-order
variables_order = "GPCS"

当我设置variables_order时返回EGPCS$_ENV不再为空。

<强>2。当您在 .htaccess 中使用 SetEnv 时,它最终会出现在 $_SERVER 中,而不是 $_ENV,我不得不说,当它被命名为 SetEnv...

时,它有点令人困惑
# .htaccess
SetEnv ENV dev
SetEnv BASE /ssl/

# php
var_dump($_SERVER['ENV'], $_SERVER['BASE']);

// string 'dev' (length=3)
// string '/ssl/' (length=5)

<强>3。 getenv 函数将始终有效,并且不受 $_ENV 的 PHP 设置的影响 此外,它似乎对大小写不敏感,这可能很有用。

var_dump(getenv('os'), getenv('env'));

// string 'Windows_NT' (length=10)
// string 'dev' (length=3)

关于php - 为什么我的 $_ENV 是空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42212729/

相关文章:

apache - 如何在不破坏客户端和服务器之间的 https 隧道的情况下配置 apache 反向代理?

Windows路径环境变量

php - Mac OS X 10.9 连接到的未知 SSL 协议(protocol)错误

javascript - 如何为 php 文件制作通用的 ajax 函数

apache - 如何配置 apache (ubuntu) 以使 www.mysite.com 指向 www.mysite.com/drupal6/?

JAVA_HOME 和 PATH 已设置,但 java -version 仍显示旧版本

java编译环境不适用于windows

php - 在 MySQL 中获取平均值

php - 阻止对某些 URI 的 GET 访问

WordPress 和 Ubuntu,用于 FTP 的 www-data 和 ubuntu