3

我有一个大型 php 项目,它依赖于两个级别的配置文件。

在我的项目文件夹中,我有一个 default.config.ini 已加载,然后与站点特定的配置文件合并。

目前,代码正在读取PROJECT_CONFIG指向特定配置文件的环境变量。这对于在他们自己的机器上工作的每个开发人员来说都很好。当我们将项目移动到服务器并希望拥有同一个项目的三个实例时,问题就出现了:Dev、Stage、Live。

我们现在不能再使用全局 env var,因为每个子域需要不同(项目设置为 dev.domain.com、stage.domain.com 和 www.domain.com)。

我考虑过将服务器变量转换为环境变量HTTP_HOST名称并使用它来设置正确的配置(即,当用户从 dev.domain.com 请求页面时,代码会寻找一个名为 的环境变量dev_domain_com),但我想看看其他人在做什么以及他们推荐什么。

任何建议将不胜感激,在此先感谢

4

3 回答 3

2

大卫施密特的想法是最优雅的。我可以看到一个案例用于$_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'].

于 2010-01-18T19:37:18.547 回答
2

使用 apache 的SetEnv指令PROJECT_CONFIG在容器中设置您对应用程序实例的访问权限:

SetEnv PROJECT_CONFIG /src/dev/app.config.php
于 2009-05-19T17:19:42.030 回答
0

我认为您当前的解决方案很好。毕竟环境设置是有原因的。我已经看到你的做事方式用于我曾经工作过的大型专有 cms。

我需要让开发/阶段/生产站点加载不同的配置并计划使用环境设置并让它在未设置环境设置时将主机名检测为后备。

于 2010-01-18T10:43:59.973 回答