Charger un fichier de configuration à la demande sans changer l'url
Votre application est exécutée sur plusieurs environnements différents (dev, integration, preprod, prod, ...).
Vous avez bien fait les choses, les différences entre les environnements sont externalisées dans un fichier de configuration de sorte que le code (php) soit identique sur l'ensemble des environnements.
...
Votre application est exécutée sur plusieurs environnements différents (dev, integration, preprod, prod, ...).
Vous avez bien fait les choses, les différences entre les environnements sont externalisées dans un fichier de configuration de sorte que le code (php) soit identique sur l'ensemble des environnements.
Dans votre code, vous détectez l'environnement sur lequel est exécuté votre code grâce à l'utilisation d'une variable d'environnement "système" (ex: PHP_ENV) qui contient le nom de l'environnement. La valeur de cette variable est donc différente sur chacun des serveurs. Vous utilisez soit une variable d'environnement système et la directive PassEnv d'Apache, soit la directive SetEnv d'Apache pour positionner la valeur dans vos fichiers de configuration Apache des différents serveurs, par exemple dans le fichier httpd.conf du serveur de pré-production :
SetEnv PHP_ENV preprod
Si vous êtes dans ce cas là, Apache vous permet de surcharger facilement la valeur de la variable PHP_ENV lors d'une requête HTTP, rajoutez la ligne suivante dans votre fichier httpd.conf :
SetEnvIf X-PHP-Env "(.+)" PHP_ENV=$1
Maintenant si vous faites une requête HTTP en passant le header HTTP :
X-PHP-Env: integration
Même si votre application est exécutée sur l'environnement de pré-production, elle chargera le fichier (ou la section de configuration) liée à l'intégration.
Cette technique peut vous aider dans différents cas :
- vous n'avez qu'un seul serveur, mais vous souhaitez gérer plusieurs environnements sur la même version du code (l'url reste la même, c'est juste le header X-PHP-Env qui change)
- vous souhaitez charger une base de tests facilement, vous créez alors un environnement prod_test qui à les mêmes caractéristiques que prod mais qui pointent sur une base de tests au lieu de pointer sur la base de production. (l'url reste la même c'est juste le header X-PHP-Env qui change)
- ...
Vous voyez d'autres utilisations ?
PS: dans mon cas, cela permet d'effectuez des tests de non regressions sur des WebServices, sans changer l'url, mais en chargeant une base de données distantes qui contient un jeux de données de tests
PS2: pour tester manuellement (i.e. avec un navigateur) cette solution, vous devrez installez un plugin à votre navigateur qui vous permettent de modifier les headers http de la requête (LiveHTTPHeaders de mémoire sous Firefox fait cela très bien)
Commentaires
Il existe aussi le plugin "modify headers" qui permet de (comme son nom l'indique) modifier les headers.