【问题标题】:PHP and Apache environment variablesPHP 和 Apache 环境变量
【发布时间】:2011-02-25 20:03:21
【问题描述】:

我想在启动时将 linux 中的环境变量传递给 apache。

导出 MYVAR=5 --我在命令行定义我的环境变量

PassEnv MYVAR --set apache 导入 apache 配置文件中的变量

apachectl 重启 --当我重新启动 apache 时,我没有收到错误消息。不过我注意到了 如果我没有在第一步中创建环境变量,我会收到一条警告消息,所以必须在这里工作

回显 $_SERVER['MYVAR'] --i 尝试访问 PHP 中的环境变量,但它没有定义

我观察到,如果我尝试 PassEnv 一个已经存在的环境变量(我自己没有创建的环境变量),它可以正常工作。 SetEnv 指令也可以正常工作。

我真的很想将环境变量即时传递给 apache,而不将其写入文件。非常感谢帮助。

我正在使用 CentOS、PHP5 和 Apache2。

谢谢。

更新 如果我直接使用 httpd 调用 apache 启动而不使用 shell 脚本 apachectl,则似乎环境变量会被传递。我会认为“导出”会将变量导出到 shell 脚本,不是吗?我不是 linux 大师,所以请原谅我缺乏知识。

【问题讨论】:

    标签: php apache2


    【解决方案1】:

    如果您希望将环境变量传递给 apache,则应确保为 apache 运行的环境定义了所述环境变量。为此,最简单的选择是添加 export MYVAR=value 行envvars(应该位于 /etc/apache2 中)或启动 apache 的脚本(在 /etc/init.d 中),然后将 PassEnv MYVAR 添加到 apache 配置中所需的位置。

    重启 apache 应该确保传递了 MYVAR 环境变量。 AFAIK 虽然 apache 正在运行,但您将无法更改此 var 的值...

    CentOS 的一些相关信息:http://php.dzone.com/news/inserting-variable-headers-apa&default=false&zid=159&browser=16&mid=0&refresh=0

    【讨论】:

      【解决方案2】:

      您应该使用超全局$_ENV 访问环境变量:

      $_ENV['MYVAR']

      http://www.php.net/manual/en/reserved.variables.environment.php

      更新

      您的变量实际上可能在$_SERVER 下,根据下面的链接。值得检查$_ENV

      根据http://www.php.net/manual/en/reserved.variables.environment.php#97105

      【讨论】:

        【解决方案3】:

        扩展上面的 wimvds 答案;您可以在 Apache 使用 SetEnvIf 模块运行时更改环境变量。具体来说,就是该模块的 SetEnvIf 指令。

        例如

        SetEnvIf Request_URI "^.*\/foobar.*$" FOOBAR="something"
        

        如果正则表达式匹配请求 URI(在本例中,任何包含单词“foobar”的 URI),上述示例将设置 $FOOBAR 环境变量为“something”。您可以在主机的配置文件中定义它(通常在 /etc/apache2/sites-available/mywebsite.conf 或类似文件中)。

        【讨论】:

          猜你喜欢
          • 2016-06-27
          • 2011-09-20
          • 2017-08-26
          • 2013-03-03
          • 1970-01-01
          • 2019-02-04
          • 2023-03-10
          • 2020-12-07
          • 1970-01-01
          相关资源
          最近更新 更多