在httpd.conf中设置PHP变量?

时间:2008-09-28 17:56:34

标签: php apache

我想基于每个虚拟主机自动更改我的数据库连接设置,这样我就不必编辑任何PHP代码,因为它从暂存转移到实时但访问不同的数据库。这是在一个专用服务器上。

所以我想知道,我可以在httpd.conf中设置一个PHP变量或常量作为vhost定义的一部分,然后该站点可以自动将其自身指向测试数据库吗?

$database = 'live';
if (some staging environment variable is true) {
    $database = 'testing'; // and not live
}

如果这是不可能的,我想在这种情况下我可以安全地检查我正在运行的主机名,但我想要一些不那么脆弱的东西

希望这是有道理的

非常感谢

伊恩

6 个答案:

答案 0 :(得分:72)

是的......你可以这样做:

SetEnv DATABASE_NAME testing

然后在PHP中:

$database = $_SERVER["DATABASE_NAME"];

$database = getenv("DATABASE_NAME");

答案 1 :(得分:15)

您可以设置环境变量并使用PHP检索它。

在httpd.conf中:

SetEnv database testing

在你的PHP中:

if (getenv('database') == 'testing') {

if ($_SERVER['database'] == 'testing') {

答案 2 :(得分:12)

您是否尝试过使用.htaccess文件?您可以使用它覆盖php.ini值。

将.htaccess文件放入htdocs目录:

php_value name value

更多信息:

答案 3 :(得分:3)

我不会设置环境变量,因为这在默认脚本输出中也是可见的,例如PhpInfo();

只需在htdocs文件夹正上方的.htaccess中使用php_value就可以了,并且安全了:)

答案 4 :(得分:2)

.htaccess的问题在于它是代码库树的一部分。代码库树是VC / SVN的一部分。因此,本地/开发的任何变化都会转移到生产中。保持httpd.conf中的env变量设置可以省去不小心不会意外覆盖服务器vs dev标志的工作。当然,除非你想要使用IP地址或主机名,否则两者都不是可扩展的方法。

答案 5 :(得分:0)

我也在考虑这种类型的解决方案。我发现这是在Apache下你可以使用http.conf中的SetEnv KeyName DataValue,在IIS中你可以使用快速CGI设置>>编辑...>>环境变量>> ...并添加KeyName, DataValue

这反过来允许将PHP $var = $_SERVER["KeyName"];设置为DataValue并在IIS和Apache下一致地使用。

我知道这是一个奇怪的用例。我在工作中使用WAMP,在家中使用MAMP,因此能够以相同的方式工作是很好的。