Le moyen le plus simple est, comme vous l'avez dit, d'utiliser un fichier de configuration.
De nombreux frameworks l'utilisent ( Zend , CakePHP , Kohana ) et c'est la façon la plus courante de faire les choses (même dans un environnement non-PHP tel que ASP.NET avec son système de gestion de l'espace et des ressources). web.config
fichiers). Cela vous permet également de copier les valeurs de configuration d'un environnement à l'autre en copiant simplement les fichiers du site, ce qui est un avantage par rapport aux variables d'environnement de configuration du serveur (qui peuvent très rapidement être perdues et oubliées).
Vous ne devriez pas avoir à vous soucier de l'obscurcissement du mot de passe puisqu'il ne s'agit pas d'un fichier accessible au monde entier, et certainement pas d'un fichier accessible sur le Web. Ce que je veux dire par là, c'est que vous devriez soit a) dire à votre serveur web de ne pas servir votre fichier de configuration ( IIS le fait déjà avec web.config
et sert un statut HTTP 404.8 au lieu du contenu) ou b) le déplacer en dehors de votre répertoire de service web. Si quelqu'un peut voir votre fichier de configuration, c'est pire que de l'avoir dans votre code source.
C'est aussi une bonne idée d'avoir une version de base (vide / par défaut) du fichier de configuration, et de la séparer par environnements, de sorte que vous puissiez avoir un fichier de configuration différent pour les plateformes de production, de développement et de test.
Une variable d'environnement est le moyen le plus courant de différencier ces environnements, un peu comme le code ci-dessous :
// Check if it's been set by the web server
if (!empty($_ENV['ENVIRONMENT'])) {
// Copy from web server to PHP constant
define('ENVIRONMENT', $_ENV['ENVIRONMENT']);
}
if (!defined('ENVIRONMENT')) {
// Default to development
define('ENVIRONMENT', 'development');
}
// Load in default configuration values
require_once 'config.default.php';
// Load in the overridden configuration file for this environment
require_once 'config.' . ENVIRONMENT . '.php';
Une autre méthode assez courante consiste à utiliser un fichier de configuration XML et à ne lire que les valeurs dont vous avez besoin (en stockant une copie en cache du fichier de configuration en mémoire). Cette méthode peut très facilement être restreinte pour ne charger que certaines valeurs, plutôt que de permettre l'inclusion arbitraire de fichiers PHP, et c'est globalement une meilleure solution à mon avis, mais ce qui précède devrait vous mettre sur la bonne voie.
Vous voudrez probablement que votre VCS pour ignorer le fichier. D'autre part, vous pouvez souhaiter qu'un squelette du fichier, ou un fichier avec des valeurs par défaut raisonnables (ce dernier point ne s'applique pas aux données de connexion, bien sûr), soit contrôlé par version. Une façon courante de gérer cela est d'avoir un fichier de configuration modèle enregistré, et la procédure d'installation copie ce fichier à l'emplacement du fichier de configuration réel, où il est personnalisé. Il peut s'agir d'un processus manuel ou automatisé.
_(Bien que cela n'ait rien à voir avec la question principale, l'introduction d'une constante pour votre environnement vous permet de faire d'autres trucs sympas comme vous référer à une fausse implémentation de courrier au lieu d'une implémentation réelle <a href="http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol">SMTP </a>un, mais bien sûr cela pourrait aussi être fait avec un fichier de configuration)_