2010-02-28 53 views
5

我不认为使用.ini或.xml文件是高流量项目的好主意,因为每个页面加载都会导致解析config.ini或.xml文件。(Zend Framework> Zend_Config)如何避免使用.ini或.xml配置?

有没有什么办法可以将.ini/.xml替换成普通的php数组作为配置? 现在PHP INI看起来像......

[production] 
phpSettings.display_startup_errors = 0 
phpSettings.display_errors = 0 
phpSettings.date.timezone = "Europe/London" 
includePaths.library = APPLICATION_PATH "/../library" 
bootstrap.path = APPLICATION_PATH "/Bootstrap.php" 
bootstrap.class = "Bootstrap" 
appnamespace = "Application" 
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" 
resources.frontController.params.displayExceptions = 0 
resources.db.adapter = PDO_MYSQL 
resources.db.params.host = localhost 
resources.db.params.username = rob 
resources.db.params.password = 123456 
resources.db.params.dbname = zf-tutorial 
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" 
resources.view.doctype = "XHTML1_STRICT" 

[staging : production] 

[testing : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 

[development : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 
resources.frontController.params.displayExceptions = 1 

我想是这样的......

<?php 

$config = array(
    'production' => array(
     ['phpSettings.display_startup_errors'] => 0, 
     ['phpSettings.display_errors'] => 0, 
    ), 
); 

这可能吗?我该怎么做,我该如何告诉应用程序使用我自己的Config.php?

谢谢你,对不起我的英文。

UPD:我认为将数组传递给Zend_Application构造函数是正确的方法?

回答

8

是的,您可以使用数组来初始化Zend_Config对象的数据;看看this page of the Zend Framework manual(报价什么的角落找寻例子#1

通常情况下,预计用户 将使用适配器类的一个 如Zend_Config_IniZend_Config_Xml,但如果配置 数据以PHP数组形式提供,其中一个 可能只是将数据传递给构造函数 Zend_Config以便 利用简单的面向对象的 接口


你也应该看看例2the same page(报价什么是以防万一吧)

通常希望使用纯 基于PHP的配置文件。该 下面的代码演示了如何轻松 可以完成此

基本上,你首先创建一个包含配置的PHP文件:

// config.php 
return array(
    ... 
    ... 
); 

,然后,从另一个文件,不是配置文件使用:

$config = new Zend_Config(require 'config.php'); 


但请注意,这样做,您将无法轻松地修改能力该配置将其写回.ini文件 - 根据您的情况,最终可能会出现(或不)问题。

可以使用的一种解决方案是缓存Zend_Config数据:

  • .ini文件
  • 商店去阅读它的一些缓存mecanism
  • 而且,在接下来的页面,加载它而不是重新解析.ini文件。
+1

“接下来,从缓存中加载它,而不是重新解析.ini文件。” - 我会将缓存的数据存储在诸如序列化文本之类的东西中,并且我应该每次都将其反序列化。这不是治愈。使用php数组是加速配置的唯一方法。是的,我将无法写入配置,但对我的情况没有影响。谢谢您的回答。 – Kirzilla 2010-02-28 11:53:51

+0

不客气:-) ;;;如果你不需要写配置文件,那么,我认为将它存储在'.php'文件中确实很好:-) ;;;关于缓存和反序列化:它应该比解析'.ini' /'.xml'文件快得多:你将反序列化一个已经存在的对象,而不是从头开始重新创建它*(就像你在做当配置存储在'.php'文件中时)* – 2010-02-28 11:55:59

+0

或者你可以使用某物。像Memcached;)这将不需要序列化,会吗? – 2010-02-28 14:57:34

1

更好的方法是缓存解析php.ini的结果。但我不认为这实际上会给你带来任何问题。

+1

在我看来,它是不可能缓存解析php.ini。我可以缓存序列化的数据,但是我需要每次都要反序列化它。 – Kirzilla 2010-02-28 11:48:48

1

最好使用至少APC或任何操作码缓存来缓存它,使用Zend_Config处理.ini配置文件非常广泛,特别是在使用toArray()时。