PHP-Как выбрать раздел XML на основе атрибута? - PullRequest
0 голосов
/ 13 мая 2010

All

У меня есть файл config xml в следующем формате:

<?xml version="1.0"?>
<configdata>
    <development>
        <siteTitle>You are doing Development</siteTitle>
    </development>
    <test extends="development">
        <siteTitle>You are doing Testing</siteTitle>
    </test>
    <production extends="development">
        <siteTitle>You are in Production</siteTitle>
    </production>
</configdata>

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

$appEnvironment = "production";
$config = new Zend_Config_Xml('/config/settings.xml', $appEnvironment );

Чтобы развернуть этот код в нескольких средах, пользователь должен изменить файл index.php. Вместо этого можно сохранить атрибут в XML-файле «say active = true». На основании чего Zend_Config_Xml будет знать, какой раздел настроек XML-файла нужно прочитать?

Ответы [ 3 ]

2 голосов
/ 14 мая 2010

Если вы используете Zend Framework, я настоятельно рекомендую вам просто использовать константу APPLICATION_ENV, которая определена в стандартном файле Zend Application index.php. Если нет, то вы, вероятно, могли бы сделать это независимо.

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

Это соответствует вашей переменной среды, установленной в файле .htaccess вашего сайта:

//.htaccess
SetEnv APPLICATION_ENV development

Затем вы можете загрузить свой конфигурационный файл так:

$config = new Zend_Config_Xml('/config/settings.xml', APPLICATION_ENV );

Затем для переключения сред все, что нужно сделать, это переключить значение в файле .htaccess. На моем сервере настроен сценарий развертывания для автоматического переключения значения в зависимости от среды, в которой я развертываю:

$ sed -i 's/development/production/' /path/to/site/root/.htaccess
1 голос
/ 13 мая 2010

Есть несколько способов справиться с этим, вероятно, самым простым будет установка постоянной среды приложения в вашем файле vhost .

Если у вас нет доступа к файлу vhost (например, к общедоступному хостингу), вы можете поместить отдельный файл конфигурации в папку на сервере, доступную во всех средах.

Вы можете поместить server.xml в / home / username (выбрать каталог, который доступен во всех ваших средах).

server.xml может выглядеть как

<?xml version="1.0"?>
<configdata>
    <properties>
        <environment>production</environment>
    </properties>
</configdata>

Загрузите server.xml так же, как и любой другой файл конфигурации

$server = new Zend_Config_Xml('/home/username/server.xml', 'properties');

Наконец, вы можете загрузить свой файл конфигурации в нескольких средах без необходимости что-либо редактировать в вашем приложении.

$config = new Zend_Config_Xml('/config/settings.xml', $server->environment );

Единственное, что вам нужно, это убедиться, что ваши файлы server.xml находятся на своем месте перед развертыванием приложения.

1 голос
/ 13 мая 2010

Вместо этого вы можете иметь уникальный файл начальной загрузки для разработки и уникальный файл начальной загрузки для производства.

  • index.php.production
  • index.php.development

Эти два файла могут находиться под контролем исходного кода. Сценарий развертывания скопирует соответствующий загрузчик в index.php, и все, что вам нужно. Файл index.php может и должен игнорироваться системой контроля версий - в противном случае вы просто наступаете.

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

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