【问题标题】:How to set an environmental variable in Apache (or OS) and get the value in PHP?如何在 Apache(或 OS)中设置环境变量并在 PHP 中获取值?
【发布时间】:2016-10-12 19:27:03
【问题描述】:

我确保安装了 env 模块:

a2enmod
Your choices are: access_compat
...
Which module(s) do you want to enable (wildcards ok)?
env
Module env already enabled

我尝试通过添加以下部分在“/etc/apache2/apache2.conf”中为 localhost 设置环境变量:

<VirtualHost *:80>
    ServerName localhost
    ServerAdmin me@somewhere.com
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    SetEnv devmode 1
</VirtualHost>

...使用以下命令重新启动 Apache:

sudo /etc/init.d/apache2 restart

...然后在 PHP 中使用:

getenv("devmode")

或:

apache_getenv("devmode")

...但是当通过本地主机上的浏览器访问脚本时,这些函数没有任何显示,PHP 中的值是空的。我尝试将命令单独放置,没有 VirtualHost 部分:

SetEnv devmode 1

我尝试将以下行添加到 envvars:

export devmode=1

更新 我还尝试将 VirtualHost 部分放在 /etc/apache2/sites-available 中的专用文件中,并使用 a2ensite 添加该文件。

我使用的是 Linux Mint 17.3 版。我做错了什么?

【问题讨论】:

  • 您确定执行了 virthost 指令。 Apache 不会应用所有虚拟主机,只会应用它找到的第一个匹配的虚拟主机。
  • 我完全不确定 Apache。虽然 apache2.conf 文件中没有其他“VirtualHost”部分。
  • 尝试将 SetEnv devmode 测试放到您的 .htaccess 文件中
  • 一开始你还在使用虚拟主机吗?如果不是,只需将SetEnv devmode 1 放在任何地方(没有&lt;VirtualHost&gt; 容器)。
  • 我的印象是您仍然不确定虚拟主机是什么或您的网站托管在哪个虚拟主机上。您是使用http://localhost 还是通过IP 地址或注册域名加载站点?你有非默认端口吗?

标签: php linux apache


【解决方案1】:

你试过apache_getenv吗?

【讨论】:

  • 好的,这很有用。我尝试了这个更改,但来自 apache_getenv("devmode") 的值为 false。
  • 根据我的经验,环境变量无处不在(getenv()$_ENV$_SERVER...)。通常不需要专门的 Apache 函数。
  • Álvaro González 你的意思是 apache_getenv 是一个专用函数吗?
  • @tyebillion 老实说,我没有尝试过,我什至不知道它的作用。但我只是说使用 Apache 的 SetEnv 指令创建的环境变量只是简单地与其余部分合并,您不需要专门设计的函数来获取它们。
【解决方案2】:

将 VirtualHost 部分放入专用文件后,如我在原始问题中所述,我发现解决方案是再次运行 Apache 重启命令:

sudo /etc/init.d/apache2 restart

然后 devmode 变量出现在 PHP 中。

【讨论】:

  • 你的意思是运行sudo /etc/init.d/apache2 restart一次没有用吗?
  • 不,我是在创建专用文件后这样做的。
猜你喜欢
  • 2023-03-10
  • 2012-03-15
  • 2016-04-15
  • 2016-09-30
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 2014-05-02
相关资源
最近更新 更多