【发布时间】:2013-06-09 00:24:02
【问题描述】:
我正在尝试将环境变量从 .htaccess 传递给 PHP。这在我的本地 WAMP 服务器上运行良好,但在托管我的网站的服务器上,它会无缘无故地失败。
这是我的测试配置:
.htaccess:
SetEnv TEST_VARIABLE test_value
test.php:
<pre>
getenv('TEST_VARIABLE') = <?php print getenv('TEST_VARIABLE'); ?>
getenv('REDIRECT_TEST_VARIABLE') = <?php print getenv('REDIRECT_TEST_VARIABLE'); ?>
</pre>
在我的本地服务器上,正确获取 test.php 会返回:
getenv('TEST_VARIABLE') = test_value
getenv('REDIRECT_TEST_VARIABLE') =
但在生产服务器上,它返回:
getenv('TEST_VARIABLE') =
getenv('REDIRECT_TEST_VARIABLE') =
我已经排除的事情:
mod_env未被主机安装/启用。不可能,因为那样SetEnv将无法被识别,并且在处理 .htaccess 时我会得到 500。此目录的
httpd.conf中的AllowOverrides不包括FileInfo。不可能,因为 Apache 在遇到SetEnv指令时会抛出错误“SetEnv not allowed here”,我会再次得到 500。variables_order在 php.ini 中不包含“E”。这可以解释$_ENV超全局为空(确实如此),但不能解释为什么getenv()不返回这些变量的值。整个环境都搞砸了。不可能,因为
getenv('PATH')和getenv('SERVER_NAME')仍然返回有效值。
此时我不知道是什么配置导致了这种情况。
【问题讨论】:
标签: php apache cgi environment-variables