Je fais un article rapide sur le sujet même si cela est sans doute connu par la plupart. Malgré tout, il m’arrive en discutant avec d’autres développeurs que tout le monde ne connaît pas le système d’auto_prepend_file qui peut être une façon pratique de gérer ses constantes.

On le sait, dans beaucoup de projets de développement (et les projets PHP ne font pas exceptions) il va falloir gérer un certain nombre de constantes (chemin, urls, comptes…). Et ces constantes sont en général différentes entre le développement et la production.
On peut rassembler ces constantes dans un fichier de configuration à l’intérieur d’un projet, ce qui peut être une bonne façon de faire, mais comment bien gérer le fait de prendre les constantes de développement en développement et celles de production en prod sans mettre une série de if ?

Il existe une méthode assez simple, et qui peut être efficace dans ce cas.
Il faut centraliser les constantes dans un fichier PHP. Cela a déjà le mérite de les mettre toutes au même endroit.
Ensuite, nous allons utiliser la propriété « auto_prepend_file » du fichier de configuration php.ini. Cela aura pour effet de charger ce fichier à chaque appel d’un fichier PHP, avant ce dernier. Ainsi, nous sommes assurés d’avoir toutes nos constantes avant de faire le traitement PHP souhaité (comme pour un include).

Dans le php.ini, la syntaxe est la suivant en en changeant le chemin vers le fichier pour mettre le votre :

auto_prepend_file = /var/www/intranet/lib/config/prod_config.php

Dans le chemin ci-dessus, vous voyez dans le nom du fichier qu’il y a « prod ». Vous pouvez vous créer deux fichiers, un dev_config.php et un prod_config.php. Il suffit alors en fonction du serveur à configurer de pointer vers l’un ou l’autre. Comme vous le savez, il existe un php.ini pour le serveur apache, et un pour le CLI. Vous pouvez au choix utiliser le même, ou bien avoir un fichier de config dédié au CLI, le fonctionnement est le même.

Je rappelle par contre que ce fichier est chargé à chaque appel d’un PHP. Du coup, faites bien attention de ne pas avoir d’erreur dans ce fichier au risque d’avoir un certain nombre de logs 🙂

Documentation PHP