我想基于每个虚拟主机自动更改我的数据库连接设置,这样我就不必编辑任何PHP代码,因为它从暂存转移到实时但访问不同的数据库。这是在一个专用服务器上。
所以我想知道,我可以在httpd.conf中设置一个PHP变量或常量作为vhost定义的一部分,然后该站点可以自动将其自身指向测试数据库吗?
$database = 'live';
if (some staging environment variable is true) {
$database = 'testing'; // and not live
}
如果这是不可能的,我想在这种情况下我可以安全地检查我正在运行的主机名,但我想要一些不那么脆弱的东西
希望这是有道理的
非常感谢伊恩
答案 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,因此能够以相同的方式工作是很好的。