【问题标题】:(Zend Framework > Zend_Config) How to avoid using .ini or .xml config?(Zend Framework > Zend_Config) 如何避免使用 .ini 或 .xml 配置?
【发布时间】:2010-02-28 11:43:18
【问题描述】:

我不认为对于高流量项目使用 .ini 或 .xml 文件是一个好主意,因为每次页面加载都会导致解析 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 构造函数是正确的方法吗?

【问题讨论】:

    标签: php zend-framework


    【解决方案1】:

    是的,您可以使用数组来初始化 Zend_Config 对象的数据;看看this page of the Zend Framework manual (引用周围的内容示例#1

    通常预计用户 将使用适配器类之一 例如Zend_Config_IniZend_Config_Xml,但如果配置 数据在 PHP 数组中可用,一个 可以简单地将数据传递给 Zend_Config 构造函数为了 利用简单的面向对象 界面


    你也应该看看the same page上的Example #2(引用它周围的东西)

    通常希望使用纯 基于 PHP 的配置文件。这 以下代码说明了如何轻松 这是可以实现的

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

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

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

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


    但请注意,这样做,您将失去轻松修改配置的能力,将其写回.ini 文件——根据您的情况,最终可能(或不)一个问题。

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

    • .ini 文件中读取它
    • 将其存储到某个缓存机制中
    • 对于下一页,从缓存中加载它,而不是重新解析 .ini 文件。

    【讨论】:

    • “并且,对于下一页,从缓存中加载它,而不是重新解析 .ini 文件。” - 我会将缓存的数据存储在序列化文本中,并且我应该每次都反序列化它。这不是治愈方法。使用 php 数组是加快加载配置的唯一方法。是的,我将无法写入配置,但对于我的情况来说没关系。谢谢你的回答。
    • 不客气 :-) ;;;如果您不需要写入配置文件,那么,我想将其存储在.php 文件中确实可以:-) ;;;关于缓存和反序列化:它应该比解析.ini/.xml 文件要快得多:您将反序列化一个已经存在的对象,而不是从头开始重新创建它(就像你正在做的那样当配置存储在.php 文件中时)
    • 或者你可以使用sth。像 Memcached ;) 那不需要序列化,对吗?
    • 它需要序列化:在 PHP 中,一个对象不能按原样存储:它必须被序列化,才能表示为可以存储的字符串。
    【解决方案2】:

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

    【讨论】:

    • 在我看来,缓存解析php.ini是不可能的。我可以缓存序列化的数据,但每次都需要反序列化。
    【解决方案3】:

    最好至少使用 APC 或任何操作码缓存对其进行缓存,使用 Zend_Config 处理 .ini 配置文件占用大量 CPU 资源,尤其是在使用 toArray() 时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-16
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多