(Zend Framework> Zend_Config) Как избежать использования .ini или .xml config? - PullRequest
5 голосов
/ 28 февраля 2010

Я не думаю, что использование файлов .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 - правильный путь?

Ответы [ 3 ]

8 голосов
/ 28 февраля 2010

Да, вы можете использовать массив для инициализации данных для объекта Zend_Config; взгляните на эту страницу руководства Zend Framework (цитируя, что вокруг Пример # 1 ) :

Обычно ожидается, что пользователи будет использовать один из классов адаптера такие как Zend_Config_Ini или Zend_Config_Xml, но если конфигурация данные доступны в массиве PHP, один может просто передать данные Zend_Config конструктор для того, чтобы использовать простой объектно-ориентированный интерфейс


Вы также должны взглянуть на Пример # 2 на на той же странице (цитируя, что вокруг него) :

Часто желательно использовать чистый Конфигурационный файл на основе PHP. следующий код показывает, как легко это может быть достигнуто

По сути, вы сначала создаете файл PHP, который содержит конфигурацию:

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

И затем из другого файла используйте файл конфигурации:

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


Но учтите, что при этом вы потеряете возможность легко изменять конфигурацию, записывая ее обратно в файл .ini - который, в зависимости от вашей ситуации, может в итоге (или нет) быть проблема.

Решением, которое можно использовать, является кэширование данных Zend_Config:

  • Чтение из файла .ini
  • Храните его в некотором кэширующем механизме
  • И для следующих страниц загрузите его из кэша, вместо повторного анализа файла .ini.
1 голос
/ 15 мая 2012

Лучше всего кешировать его хотя бы с помощью APC или любого кеша кода операции, обработка файла конфигурации .ini с помощью Zend_Config очень сильно загружает ЦП, особенно при использовании toArray ().

1 голос
/ 28 февраля 2010

Лучшим способом было бы кэшировать результат парсинга php.ini. Но я не думаю, что это действительно вызовет у вас какие-либо проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...