code-laboratory.com jest blogiem poświęconym w całości programowaniu oraz technologiom internetowym. Znajdziesz tutaj kod, gotowy do wykorzystania w twoich projektach.

Konfiguracja aplikacji PHP

Napisane: Listopad 16th, 2009 | Kategoria: php | Tagi: , | 6 Comments »

Praktycznie każda aplikacja internetowa potrzebuje pliku konfiguracyjnego, w którym definiuje się wartości stałe dla całej aplikacji. Mogą to być np.

  • dane do połączenia z bazą danych
  • ścieżki do katalogów / plików
  • różne wielkości liczbowe (np. liczba newsów na stronie głównej)
  • komunikaty aplikacji (np. o błędach)

Wpisywanie tych wartości na sztywno w kod nie jest rozwiązaniem wygodnym, ponieważ przy zmianie tych parametrów trzeba zmieniać kod aplikacji. Dobra aplikacja to taka, która jest uniwersalna i łatwa do przenoszenia.

Klasa LabConfig

LabConfig jest prostą klasą php która pozwala zarządzać konfiguracją aplikacji internetowej. Klasa ta bazuje na pliku *.ini w którym są zapisane wszystkie atrybuty i ich wartości.

  1. <?php
  2. /*
  3. * LabConfig version 1.0
  4. *
  5. * Copyright (c) 2009 code-laboratory.com
  6. * Dual licensed under the MIT and GPL licenses.
  7. *
  8. */
  9. class LabConfig {
  10. private $_pathToFile;
  11. private $_configs = array();
  12. public function __construct ($pathToFile = ) {
  13. if ($pathToFile) {
  14. $this->_pathToFile = $pathToFile;
  15. $this->getFile();
  16. }
  17. }
  18. private function getFile() {
  19. if (!file_exists($this->_pathToFile))
  20. throw new Exception (‚No configuration file at this directory’);
  21. $this->_configs = parse_ini_file ($this->_pathToFile, true);
  22. }
  23. public function setIniFile ($pathToFile) {
  24. $this->_pathToFile = $pathToFile;
  25. $this->getFile();
  26. }
  27. public function getSection ($section) {
  28. if (array_key_exists ($section, $this->_configs)) {
  29. return $this->_configs[$section];
  30. } else
  31. return false;
  32. }
  33. public function getValue ($section, $attribute) {
  34. if (array_key_exists ($section, $this->_configs)) {
  35. return $this->_configs[$section][$attribute];
  36. } else
  37. return false;
  38. }
  39. public function changeValue ($section, $attribute, $newValue) {
  40. if (!isset($this->_configs[$section][$attribute]))
  41. return false;
  42. $this->_configs[$section][$attribute] = $newValue;
  43. return true;
  44. }
  45. public function newValue ($section, $attribute, $newValue) {
  46. $this->_configs[$section][$attribute] = $newValue;
  47. }
  48. public function save () {
  49. $str = ;
  50. foreach ($this->_configs as $section => $array) {
  51. $str .= ‚[' . $section . ']‚ . \n;
  52. foreach ($array as $k => $v) {
  53. $str .= $k . ‚ = „‚ . $v . \”\n;
  54. }
  55. }
  56. $handler = fopen ($this->_pathToFile, ‚w’);
  57. if (!$handler)
  58. return false;
  59. if (!fwrite($handler, $str))
  60. return false;
  61. fclose ($handler);
  62. return true;
  63. }
  64. }
  65. ?>
Jak używać LabConfig?

Stwórzmy przykładowy plik config.ini, który będzie plikiem konfiguracyjnym naszej aplikacji.

  1. [database]
  2. host = „server.com”
  3. user = „user”
  4. password = „password”
  5. [paths]
  6. path_to_php_classes = „/my/classes/”
  7. path_to_images = „/my/images/”
  8. [numbers]
  9. number_of_news = „5″
  10. number_of_images_on_slide = „12″

Inicjalizacja obiektu LabConfig oraz przykłady wykorzystywania poniżej.

  1. /* inicjalizacja obiektu LabConfig */
  2. require_once (‚LabConfig.php’);
  3. $LabConfig = new LabConfig();
  4. // można odrazu $LabConfig = new LabConfig(‚config.ini’);
  5. $LabConfig->setIniFile(‚config.ini’);
  6. // aby pobrać wartości całej sekcji w pliku konfiguracyjnym należy wywołać metodę getSection
  7. // zwraca ona tablicę asocjacyjną gdzie kluczami są nazwy atrybutów
  8. // ta instrukcja wyświetli „Array ( [number_of_news] => 5 [number_of_images_on_slide] => 12 )”
  9. print_r($LabConfig->getSection(‚numbers’));
  10. // aby pobrać pojedyńczą wartość atrybutu należy wywołać metodę getValue
  11. $path = $LabConfig->getValue(‚paths’, ‚path_to_images’);
  12. /* Funkcja __autoload() */
  13. function __autoload ($classname) {
  14. $LabConfig = new LabConfig(‚config.ini’);
  15. // pobranie pojedynczej wartosci ‚path_to_php_classes’ z sekcji ‚paths’
  16. $classesPath = $LabConfig->getValue(‚paths’, ‚path_to_php_classes’);
  17. // wczytanie pliku o ścieżce pobranej z konfiguracji i
  18. // nazwie klasy
  19. require_once ($classesPath . $classname . ‚.php’);
  20. }
  21. /* Połączenie z bazą danych */
  22. $LabConfig = new LabConfig(‚config.ini’);
  23. // pobranie sekcji ‚database’
  24. $database = $LabConfig->getSection(‚database’);
  25. // połączenie z bazą za pomocą danych z konfiguracji
  26. mysql_connect($database['host'], $database['user'], $database['password']);
  27. /* Edytowanie pliku konfiguracji w panelu administaryjnym */
  28. $LabConfig = new LabConfig(‚config.ini’);
  29. // zamiana ‚number_of_news’ w sekcji ‚numbers’
  30. $LabConfig->changeValue(‚numbers’, ‚number_of_news’, ’6′);
  31. // dodanie nowej sekcji ‚general’ i nowego atrybutu ‚main_text’ o wartości ‚Welcome on my website’
  32. $LabConfig->newValue(‚general’, ‚main_text’, ‚Welcome on my website’);
  33. // dodanie nowego atrybutu w sekcji general
  34. $LabConfig->newValue(‚general’, ‚display_text’, ‚true’);
  35. // no i zapisanie zmian w pliku (bez wywołania tej metody plik nie zostanie nadpisany)
  36. $LabConfig->save();

Uwaga!!! Aby plik konfiguracyjny *.ini nie był widoczny z poziomu przeglądarki należy do folderu „config” dołączyć plik htaccess, który nie zezwoli na to. Jego zawartość to: deny from all

Podsumowanie

Jak widać korzystanie z pliku konfiguracji staje się łatwe przy użyciu klasy LabConfig. Klasa ta obsługuje nie tylko odczytywanie wartości ale też zmienia te wartości, gdy zachodzi taka potrzeba. Zmiana wartości może być wykorzystywana zarówno w panelu administratora (ustawienie główne aplikacji) ale też po stronie użytkownika. Wiele jest serwisów, gdzie każdy użytkownik ma swoje konto. Nic nie stoi na przeszkodzie, aby każdy użytkownik posiadał swój plik konfiguracyjny, który bardziej spersonalizuje jego konto.
Sposobów na wykorzystanie klasy LabConfig może być wiele. Przedstawiłem tutaj tylko kilka z nich. Komentarze mile widziane. Będą motywacją do dalszej pracy ;-)

UPDATE 2010-01-30 13:50
Aby kod można było bez problemu testować u siebie dodałem download poniżej.


6 komentarze na “Konfiguracja aplikacji PHP”

  1. 1 Piotrek napisał(a) 21:26, Grudzień 6th, 2009:

    ciekawy artykuł. Czekam na kolejne wiadomości z przykładami :) Pozdrawiam

  2. 2 Pablo79 napisał(a) 18:29, Styczeń 19th, 2010:

    Witam, pomysł świetny.
    Ale…
    Mógłbyś pomyśleć nad użytecznością strony.
    Skopiowanie kodu jest utrudnione – może gotowe pliki do pobrania, albo inny widok – łatwy do kopiowania.

    Pozdrawiam
    Pablo79

  3. 3 admin napisał(a) 13:31, Styczeń 30th, 2010:

    @Pablo79 – to był mój pierwszy post i nie pomyślałem o tym. Dodałem DOWNLOAD i można już pobrać cały kod.
    Dzięki za info ;)

  4. 4 online napisał(a) 12:29, Maj 19th, 2010:

    bardzo ciekawe, dzieki

  5. 5 Suchy napisał(a) 18:00, Październik 14th, 2010:

    Bardzo ciekawa klasa, pozwoliłem sobie jej użyć ;)

    Czekam na kolejne posty, tylko żebyś je dawał częściej, bo są serio bardzo dobrej jakości.

  6. 6 admin napisał(a) 19:45, Październik 17th, 2010:

    @Suchy – cieszy mnie, że komuś się to przydało ;) Za niedługo dam notkę na blogu o systemie (open source) nad którym pracuję obecnie

Zostaw komentarz

  • Anti-Spam Quiz: