2010-05-13 7 views
0

Tous,PHP-Comment choisir la section XML en fonction d'un attribut?

J'ai un fichier xml de configuration dans le format suivant:

<?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> 

Pour lire ce fichier de configuration pour appliquer les paramètres de l'environnement, je suis actuellement en utilisant le code suivant dans le fichier index.php:

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

Pour déployer ce code sur plusieurs environnements, l'utilisateur doit modifier le fichier index.php. Au lieu de cela, est-il possible de maintenir un attribut dans le fichier xml, "active = true". Sur quelle base Zend_Config_Xml saura quelle section des paramètres du fichier xml lire?

Répondre

2

Si vous utilisez Zend Framework, je vous suggère fortement d'utiliser la constante APPLICATION_ENV définie dans l'index.php par défaut de l'application Zend. Si vous n'êtes pas, vous pourriez probablement faire cela indépendamment.

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

Il correspond à votre la variable d'environnement définie dans le fichier .htaccess de votre site:

//.htaccess 
SetEnv APPLICATION_ENV development 

Vous pouvez ensuite charger votre fichier de configuration comme ceci:

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

Puis pour changer les environnements, tout ce qui doit être fait est de changer la valeur dans le fichier .htaccess. Sur mon serveur, mon script de déploiement est configuré pour basculer automatiquement la valeur en fonction de l'environnement dans lequel je déploie:

$ sed -i 's/development/production/' /path/to/site/root/.htaccess 
1

Vous pourriez, à la place, avoir un fichier bootstrap unique pour le développement et un fichier bootstrap unique pour la production.

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

Ces deux fichiers peuvent être sous contrôle de code source. Un script de déploiement copie le bootstrap approprié dans index.php et vous voilà parti. Le fichier index.php peut, et devrait, être ignoré par le contrôle de source - sinon vous ne faites que marcher sur les orteils.

Bien sûr, les fichiers bootstrap spécialisés contiendraient la chaîne d'environnement appropriée.

1

Il y a plusieurs façons de gérer cela, probablement le plus simple serait setting the application environment constant in your vhost file.

Si vous n'avez pas accès au fichier vhost (hébergement mutualisé, par exemple), vous pouvez placer un fichier de configuration séparé dans un emplacement sur le serveur disponible dans tous les environnements. Vous pouvez placer server.xml dans/home/nom_utilisateur (choisissez un répertoire disponible dans tous vos environnements).

server.xml pourrait ressembler à

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

server.xml de charge comme tout autre fichier de configuration

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

Enfin, vous pouvez charger votre fichier de configuration sur plusieurs environnements sans avoir à modifier quoi que ce soit dans votre application.

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

Celui Gotcha ici est que vous devez vous assurer que vos fichiers server.xml sont en place avant de déployer votre application.

Questions connexes