经过一些试验,我通过以下方式解决了我的问题并成功测试了它。
- 将配置拆分为多个文件。在我的情况下,我有 1 个大型 application.ini 包含几乎所有我的配置和 1 个小型 version.ini 包含一些特定于版本的数据
- 单独创建所有(在我的情况下为 2) Zend_Config_ini 对象,但将 allowModification 设置为一个
- 使用 Zend_Config_Ini->Merge() 功能合并所有配置,然后将其设置为只读
- 要更新配置的任何部分,从那个特定的 ini 文件创建一个新的 Zend_Config_ini 对象并将其设置为允许修改和跳过范围
- 更新配置并使用 Zend_Config_Writer_ini 写入更改
示例代码:
/* Load the config */
//Get the application-config and set 'allowModifications' => true
$config = new Zend_Config_Ini('../application/configs/application.ini',$state, array('allowModifications' => true));
//Get the second config-file
$configVersion = new Zend_Config_Ini('../application/configs/version.ini');
//Merge both config-files and then set it to read-only
$config->merge($configVersion);
$config->setReadOnly();
/* Update a part of the config */
$configVersion = new Zend_Config_Ini(
APPLICATION_PATH.'/configs/version.ini',
null,
array('skipExtends' => true, 'allowModifications' => true)
);
//Change some data here
$configVersion->newData = "Some data";
//Write the updated ini
$writer = new Zend_Config_Writer_Ini(
array('config' => $configVersion, 'filename' => 'Path_To_Config_files/version.ini')
);
try
{
$writer->write();
}
catch (Exception $e) {
//Error handling
}