De gemakkelijkste manier is, zoals je zei, om een configuratiebestand te gebruiken.
Veel frameworks gebruiken dit (Zend
, CakePHP
, Kohana
, etc) en het is de meest gebruikelijke manier om dingen te doen (zelfs in een niet-PHP-omgeving zoals ASP.NET met zijn web.config
bestanden). Hierdoor kunt u ook configuratiewaarden van omgeving naar omgeving kopiëren door alleen de bestanden voor de site te kopiëren, wat een voordeel is ten opzichte van het vertrouwen op serverconfiguratieomgevingsvariabelen (die zeer snel verloren kunnen gaan en vergeten kunnen worden).
U hoeft zich geen zorgen te maken over verduistering van het wachtwoord, aangezien het geen bestand is dat voor de hele wereld toegankelijk is, en het zou zeker niet toegankelijk moeten zijn voor het web. Wat ik hiermee bedoel, is dat je ofwel a) je webserver zou vertellen om je configuratiebestand niet te dienen ( IIS
doet dit al met web.config
bestanden en heeft een HTTP 404.8-status in plaats van de inhoud) of b) Verplaats het buiten uw webserver-directory. Als iemand je configuratiebestand kan zien, is dat erger dan het in je broncode te hebben.
Het is ook een goed idee om een basisversie (leeg/standaard) van het configuratiebestand te hebben, en dit te scheiden per omgeving, zodat je een ander configuratiebestand kunt hebben voor productie-, ontwikkelings- en testplatforms.
Een omgevingsvariabele is de meest gebruikelijke manier om onderscheid te maken tussen deze omgevingen, zoiets als de onderstaande code:
// 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';
Een andere manier die vrij gebruikelijk is, is om een XML-configuratiebestand te gebruiken en alleen de waarden in te lezen die u nodig hebt (opslaan van een gecachte kopie van het configuratiebestand in het geheugen). Dit kan heel gemakkelijk worden beperkt om alleen bepaalde waarden te laden, in plaats van willekeurige opname van PHP-bestanden toe te staan en is naar mijn mening over het algemeen een betere oplossing, maar het bovenstaande zou je in de goede richting moeten helpen.
U wilt waarschijnlijk uw VCS om het bestand te negeren. Aan de andere kant wil je misschien dat een skelet van het bestand, of een bestand met redelijke standaardwaarden (dit laatste geldt natuurlijk niet voor inloggegevens), versiebeheerst is. Een gebruikelijke manier om daarmee om te gaan is om een ingecheckt sjabloonconfiguratiebestand te hebben, en de installatieprocedure kopieert dat bestand naar de locatie van het echte configuratiebestand, waar het wordt aangepast. Dit kan een handmatig of een geautomatiseerd proces zijn.
(Hoewel enigszins los van de hoofdvraag, kun je door een constante voor je omgeving in te voeren, andere coole dingen doen, zoals het uitstellen van een nepmailimplementatie in plaats van een live SMTP één, maar dit kan natuurlijk ook met een configuratiebestand)