在基于 Zend 的应用程序的传统编码中,数据库设置存储在 application.ini 中。这会存储每个应用程序的设置。
StackOverflow 上是否有人探索过将数据库设置从 application.ini 移动到环境中的可能性?例如,一种基本方法是将可能的数据库连接设置存储在 Apache2 envvars 文件中,或者可能存储在 /etc/profile 或 /etc/environment 之类的文件中。
我想这样做有几个原因:
1) 应用程序中存在实时生产数据库设置存在安全风险。开发人员可能会无意中连接到实时数据库并导致客户敏感数据损坏。这将保护开发人员、企业和最终用户。
2)维护和管理多个应用程序的db设置很困难。例如,如果数据库的用户名或密码发生更改,那么我们需要更改 application.ini 或多个应用程序,这意味着再次推出该文件或整个应用程序。
3) 应用程序可以部署到数据库设置不同的多个“生产”环境。因此,application.ini 中可能必须有多个部分 - 例如生产数据中心 X、生产数据中心 Y。
正如您所看到的,关于将数据库设置保留在服务器端存在争议。因此,最好将应用程序外部的数据库设置放在全局区域中以供所有应用程序访问?这将在它自己的源代码控制中,也许开发人员无法访问。
你们怎么想?有人做过类似的事情吗?我喜欢全局 application.ini 的想法(可能称为 database.ini?)
期待听到有关该主题的一些回应。
Regards,
Steve
在我的上一个项目中,我做了类似的事情。我有application.ini
它存储在存储库中,包含应用程序的常见设置(视图设置、助手路径、启用布局等)。但是,每个应用程序实例(每个开发人员都有一个+测试和开发服务器)都有自己的local.ini
文件(没有版本控制)包含数据库设置和开发指令(启用 FirePHP、ZFDebug)。借助该解决方案,我们可以“全局”进行更改 - application.ini,并且每个开发人员都可以“本地”更改设置 - 使用local.ini
文件。
In Bootstrap.php
我将它们合并如下:
protected function _initLocalConfig()
{
$globalConfig = new Zend_Config($this->getOptions(), true);
try {
$localConfig = new Zend_Config_Ini(APPLICATION_PATH . '/configs/local.ini');
$globalConfig->merge($localConfig);
$this->setOptions($globalConfig->toArray());
} catch (Zend_Config_Exception $e) {
throw new Exception('File /configs/local.ini not found. Create it, it can be empty.');
}
}
我在这里使用第二个静态命名的 .ini 文件,在另一个项目中我们使用基于主机名的 .ini 文件。它们也可以是 JSON、XML 或 YAML 文件(以利用内置的 Zend_Config 解析器),或者您可以编写自己的适配器。
正如您所看到的,您几乎可以从任何您想要的地方获取非常规配置:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)