2010-02-28 47 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()時。