【问题标题】:PHP: Environment variable not readable by getenv()PHP:getenv() 无法读取环境变量
【发布时间】:2014-08-16 11:08:23
【问题描述】:

我正在使用 .htaccess 文件来设置环境变量

SetEnv ENV "development"

它可以被 $_SERVER['ENV'] 读取,但不能被 getenv('ENV'); 对于 getenv() 我必须使用

putenv('ENV=development');

不知道为什么 .htaccess 中设置的变量不能被 getenv() 读取。

编辑: 因为我使用的是询问“ENV”的外国脚本,所以我没有意识到只是名称“ENV”会造成麻烦(保留?)。 仅使用另一个环境变量名称的测试按预期工作

SetEnv REDIRECT_ENV "development"

编辑 2: 环境是Apache 2.2,fastcgi,debian wheezy,php5.4.4 我在 VirtualBox VM 和具有相同组件的在线根服务器上注意到了这种行为

【问题讨论】:

  • @WereWolf:很高兴知道 ;) 你用“ENV”测试了吗?
  • 是的,我先测试了,然后评论了。

标签: php apache environment-variables debian-based


【解决方案1】:

您可以使用 mod_rewrite 来检测环境:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^stage\.domain\.com$
RewriteRule (.*) $1 [E=PYRO_ENV:stage]

RewriteCond %{HTTP_HOST} ^www\.domain\.com$
RewriteRule (.*) $1 [E=PYRO_ENV:production]

和

SetEnvIf Host ^stage\.example\.com$ PYRO_ENV=stage
SetEnvIf Host ^(www\.)?example\.com$ PYRO_ENV=production

【讨论】:

  • 感谢您的变体,但如果名称为“ENV”,则所有变体都不起作用。只需另一个变量名即可。
  • 所以在这种情况下,“ENV”可能是保留字。你能不能用另一个词?毕竟,它只是另一个变量名,对吧?
  • 是的,我保留了 ENV。切克在这里php.net/manual/en/reserved.variables.environment.php
猜你喜欢
  • 2019-11-21
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 2021-10-28
  • 2013-06-07
  • 2020-01-27
  • 2018-03-04
相关资源
最近更新 更多