代码之家  ›  专栏  ›  技术社区  ›  Svish

为什么我的$环境是空的?

  •  68
  • Svish  · 技术社区  · 14 年前

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

    SetEnv FOO bar
    

    如果我打印出 $_ENV

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

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

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

    3 回复  |  直到 10 年前
        1
  •  122
  •   Erik Kalkoken    5 年前

    原来这里有两个问题:

    $_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 , $\环境 不再是空的。

    2当你使用 SetEnv 在你的 .htaccess ,结果是 $_SERVER ,不在 塞滕夫

    # .htaccess
    SetEnv ENV dev
    SetEnv BASE /ssl/
    
    # php
    var_dump($_SERVER['ENV'], $_SERVER['BASE']);
    
    // string 'dev' (length=3)
    // string '/ssl/' (length=5)
    

    三。这个 getenv

    var_dump(getenv('os'), getenv('env'));
    
    // string 'Windows_NT' (length=10)
    // string 'dev' (length=3)
    
        2
  •  12
  •   NullUserException Mark Roddy    14 年前

    $_ENV 变量是从运行PHP的环境中导入的,这取决于您的设置(操作系统、服务器、PHP是作为Apache模块运行还是在FastCGI下运行等),可能会有很大的不同。

    IIRC在一个标准的Apache+modïphp上安装在Windows上,这是在 $\环境 是更改Windows的环境变量(请参阅 this ). 这在处理Windows上的PHP扩展时非常重要,因为其中一些扩展(例如: php_ldap )只能通过上的环境变量进行配置 .

        3
  •  1
  •   mario    14 年前

    REDIRECT_* 如果使用重写规则,则会出现变量。在我的服务器上,它们看起来也是如此。这可能与在FastCGI下运行有关。如果与suexec结合,最有可能清理整个环境var池。可能需要额外的配置才能让他们回来, PassEnv 特别是。至于getenv()为什么适用于您,我不知道。但所有现象都是特定于服务器和php配置的。询问服务器故障,他们应该知道。