Najprostszym sposobem jest, jak powiedziałeś, użycie pliku konfiguracyjnego.
Wiele frameworków korzysta z tego (Zend
, CakePHP
, Kohana
, itp.) i jest to najczęstszy sposób robienia rzeczy (nawet w środowisku innym niż PHP, takim jak ASP.NET z jego web.config
akta). Pozwala to również na kopiowanie wartości konfiguracyjnych ze środowiska do środowiska, po prostu kopiując pliki dla witryny, co jest zaletą w porównaniu ze zmiennymi środowiskowymi konfiguracji serwera (które mogą bardzo szybko zostać utracone i zapomniane).
Nie powinieneś martwić się zaciemnianiem hasła, ponieważ nie jest to plik dostępny na całym świecie, a z pewnością nie powinien być dostępny przez Internet. Mam na myśli to, że albo a) Poinformujesz serwer WWW, aby nie obsługiwał twojego pliku konfiguracyjnego ( IIS
robi to już z web.config
i wyświetla stan HTTP 404.8 zamiast zawartości) lub b) Przenieś go poza katalog obsługiwany przez sieć. Jeśli ktoś może zobaczyć twój plik konfiguracyjny, jest to gorsze niż posiadanie go w kodzie źródłowym.
Dobrym pomysłem będzie również posiadanie podstawowej (pustej / domyślnej) wersji pliku konfiguracyjnego i rozdzielenie go na środowiska, tak aby można było mieć inny plik konfiguracyjny dla platform produkcyjnych, programistycznych i testowych.
Zmienna środowiskowa jest najczęstszym sposobem rozróżniania tych środowisk, podobnie jak poniższy kod:
// 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';
Innym dość powszechnym sposobem jest użycie pliku konfiguracyjnego XML i odczytywanie tylko potrzebnych wartości (przechowywanie w pamięci podręcznej kopii pliku konfiguracyjnego). Można to bardzo łatwo ograniczyć do ładowania tylko w określonych wartościach, zamiast zezwalać na dowolne włączanie plików PHP i jest to ogólnie lepsze rozwiązanie moim zdaniem, ale powyższe powinno pomóc ci zacząć we właściwym kierunku.
Prawdopodobnie będziesz potrzebować swojego VCS aby zignorować plik. Z drugiej strony, możesz chcieć, aby szkielet pliku lub taki z rozsądnymi wartościami domyślnymi (to drugie oczywiście nie dotyczy danych logowania) był kontrolowany przez wersję. Typowym sposobem radzenia sobie z tym jest zaewidencjonowanie pliku konfiguracyjnego szablonu, a procedura instalacji kopiuje ten plik do lokalizacji rzeczywistego pliku konfiguracyjnego, gdzie jest on dostosowywany. Może to być proces ręczny lub zautomatyzowany.
(Chociaż nie ma nic wspólnego z głównym pytaniem, wprowadzenie stałej dla twojego środowiska pozwala na robienie innych fajnych rzeczy, takich jak odstąpienie od implementacji fałszywej poczty zamiast żywego SMTP jeden, ale oczywiście można to również zrobić za pomocą pliku konfiguracyjnego)