我有一个很大的php项目,它依赖于两个级别的配置文件。
在我的项目文件夹中,我有一个default.config.ini,它被加载,然后与特定于站点的配置文件合并。
目前代码正在读取指向特定配置文件的环境变量PROJECT_CONFIG
。这适用于在自己的机器上工作的每个开发人员。当我们将项目移动到服务器并希望拥有同一项目的三个实例时,就会出现问题:Dev,Stage,Live。
我们现在不再可以使用全局env var,因为它需要与每个子域不同(项目设置为dev.domain.com,stage.domain.com和www.domain.com)。
我考虑将服务器变量HTTP_HOST
转换为env var名称并使用它来设置正确的配置(即当用户从dev.domain.com请求页面时,代码会查找env var叫dev_domain_com
),但我想看看其他人在做什么以及他们推荐什么。
任何建议都将非常感谢,提前谢谢
答案 0 :(得分:2)
使用apache的SetEnv指令在容器中设置PROJECT_CONFIG
,以配置对应用程序实例的访问:
SetEnv PROJECT_CONFIG /src/dev/app.config.php
答案 1 :(得分:2)
David Schmitt的想法是最优雅的。我可以看到使用$_SERVER['HTTP_HOST']
来确定您所在的服务器并相应地设置路径的情况。如果您没有权限修改服务器的虚拟主机配置文件,则可能就是这种情况。例如:
<?php
switch($_SERVER['HTTP_HOST']){
case 'dev.domain.com':
$path = '/home/dev_user/project.config.ini';
break;
case 'stage.domain.com':
$path = '/home/stage_user/project.config.ini';
break;
case 'www.domain.com':
$path = '/home/live_user/project.config.ini';
break;
default:
$path = '';
}
if(!defined('PROJECT_CONFIG')){
define('PROJECT_CONFIG', $path);
}
unset($path);
?>
注意:根据您的服务器配置,您可能希望将$_SERVER['HTTP_HOST']
替换为$_SERVER['SERVER_NAME']
。
答案 2 :(得分:0)
我认为您当前的解决方案很好。毕竟环境设置有一个原因。我已经看到了你曾经用过的大型专有cms做事的方式。
我需要做同样的事情,让dev / stage / production站点加载不同的配置并计划使用环境设置,如果没有设置env设置,让它检测主机名作为后备。