2009-05-19 7 views
3

J'ai un grand projet PHP qui repose sur deux niveaux de fichiers de configuration.Quelle est la meilleure façon de charger des fichiers de configuration pour différentes versions du même projet sur le même serveur?

Dans mon dossier de projet, j'ai un fichier default.config.ini qui est chargé puis fusionné avec un fichier de configuration spécifique au site. À l'heure actuelle, le code lit une variable d'environnement PROJECT_CONFIG qui pointe vers le fichier de configuration spécifique. Cela fonctionne bien pour chaque développeur travaillant sur leur propre machine. Le problème se pose lorsque nous déplaçons le projet sur le serveur et que nous voulons avoir trois instances du même projet: Dev, Stage, Live.

Nous ne pouvons plus utiliser la variable globale env car elle doit être différente de chaque sous-domaine (le projet est configuré comme dev.domain.com, stage.domain.com et www.domain.com). J'ai envisagé de convertir la variable de serveur HTTP_HOST en un nom de variable d'environnement et de l'utiliser pour définir la bonne configuration (par exemple, lorsqu'un utilisateur demande une page de dev.domain.com, le code recherche une variable d'environnement appelée dev_domain_com), mais je voulais voir ce que font les autres et ce qu'ils recommandent.

Tout conseil serait grandement apprécié, merci à l'avance

+0

juste une idée - si c'est à propos d'Apache, alors peut-être taguer sera utile ... (aussi httpd.conf peut-être) – namespaceform

Répondre

2

SetEnv directive Utiliser apache pour régler votre PROJECT_CONFIG dans le conteneur configuration de l'accès à l'instance d'application:

SetEnv PROJECT_CONFIG /src/dev/app.config.php 
+1

Il est à noter que vous pouvez récupérer cette valeur avec: '$ _ENV ['PROJECT_CONFIG' ] 'ou' getenv ('PROJECT_CONFIG') ' Et aussi, que le code suggéré par David devrait être placé dans le fichier .htaccess pour le répertoire racine du site ou dans les directives de configuration VirtualHost pour chaque" hôte virtuel "dans la configuration d'Apache. – sholsinger

0

Je pense que votre solution actuelle est juste bien. Les paramètres d'environnement sont là pour une raison après tout. J'ai vu votre façon de faire les choses pour un cms propriétaire à grande échelle sur lequel je travaillais. J'ai besoin de faire la même chose avec des sites de développement/d'étape/de production qui chargent différentes configurations et qui prévoient d'utiliser les paramètres d'environnement et de détecter le nom d'hôte comme solution de repli si le paramètre env n'est pas défini.

2

L'idée de David Schmitt est la plus élégante. Je pourrais voir un cas d'utilisation $_SERVER['HTTP_HOST'] pour déterminer quel serveur vous êtes sur et définir le chemin en conséquence. Un tel cas pourrait être si vous n'avez pas les privilèges pour modifier les fichiers de configuration de l'hôte virtuel du serveur. Par exemple:

<?php 
    switch($_SERVER['HTTP_HOST']){ 
    case 'dev.domain.com': 
     $path = '/home/dev_user/project.config.ini'; 
     break; 
    case 'stage.domain.com': 
     $path = '/home/stage_user/project.config.ini'; 
     break; 
    case 'www.domain.com': 
     $path = '/home/live_user/project.config.ini'; 
     break; 
    default: 
     $path = ''; 
    } 
    if(!defined('PROJECT_CONFIG')){ 
    define('PROJECT_CONFIG', $path); 
    } 
    unset($path); 
?> 

Remarque: Selon la configuration de votre serveur, vous pouvez remplacer $_SERVER['HTTP_HOST'] avec $_SERVER['SERVER_NAME'].

Questions connexes