V předešlém článku jsme si ukázali, jak vytvořit a zpracovat konfigurační soubor. Jako formát dokumentu jsme použili XML, především kvůli snadné čitelnosti pro uživatele a kvůli parseru, který máme v PHP k dispozici. Tentokrát si ukážeme další lehce interpretovatelnou syntaxi, která se ke tvorbě konfiguračních souborů přímo nabízí, všeobecně známý formát „.ini“.

Soubory s příponou .ini vám určitě nebudou neznámé. Původně šlo o textové konfigurační soubory operačních systémů Windows, postupně se ale tento formát pro svou jednoduchost rozšířil i do mnoha dalších programů a systémů. Pokud jste například někdy instalovali PHP, práci se souborem php.ini jste se vyhnuli asi jen ztěží. Je tedy celkem logické použít tento formát i pro vlastní konfigurační soubory. A PHP nám tuto práci nanejvýš usnadní.

Syntaxe .ini souborů

Než se podíváme, jaké možnosti nám PHP nabízí, je nutno si ujasnit syntaxi těchto souborů. Nepůjde o nic složitého. Konstanty a jejich hodnoty se definují jednoduše řádkem ve tvaru jmeno_konstanty = hodnota_konstanty. Hodnota konstanty může nabývat různých typů. Nejčastěji jde o číslo nebo řetězec. Řetězec se musí dát do uvozovek, pokud obsahuje i jiné znaky než alfanumerické. Takže takto například nadefinuje konstantu osm s číselnou hodnotou 8 a řetězcové konstanty jmeno a tilda s hodnotami Petr a ~:

osm = 8
jmeno = Petr
tilda = „~“

Syntaxe .ini souborů definuje také několik klíčových slov, konkrétně Off, False, No jako logickou hodnotu 0 a On, True, Yes jako logickou hodnotu 1. Pokud chcete definovat prázdný řetězec, můžete to udělat jednoduše vynecháním části za rovnítkem nebo dosazením posledního klíčového slova None.

Komentáře jsou v .ini souborech dvojího druhu. Pokud řádek začíná středníkem, je celý ignorován. Druhým typem komentáře je nadpis sekce, který je uzavřen do hranatých závorek.

Nyní si uvedeme příklad kompletního .ini souboru:

;;;;;;;;;;;;;;;;;
;příklad .ini souboru
;;;;;;;;;;;;;;;;;
[prvni cast]
;pocet uzivatelu
number_of_users = 2
;kontroluj IP adresu
checkIP = No
[druha cast]
;tvoje jmeno
nick = Petr
prezdivka = None

Je samozřejmě vhodné uživateli tuto syntaxi alespoň lehce vysvětlit, ideální je k tomu rozsáhlejší komentář na začátku samotného souboru.

Parsování dokumentu v PHP

Když už jsme si ukázali, jak má vypadat .ini soubor, zbývá nám jej načíst a jednotlivé konstanty zaregistrovat. PHP nám nabízí přímo funkci parse_ini_file().

Kompletní hlavička funkce vypadá následovně: array parse_ini_file ( string filename [, bool process_sections]). Jde tedy o funkci, která vrací asociativní pole (indexy pole jsou tvořeny názvem konstanty a obsah položky její hodnotou), respektive hodnotu FALSE při nenalezení dokumentu zadaného argumentem filename. Navíc funkce při chybě vypíše varování, proto je vhodné před ni psát operátor @, který zobrazování chybových zpráv vypíná.

Kromě toho funkce parse_ini_file() přijímá i druhý volitelný booleovský argument process_sections. Je-li nastaven na false (což je jeho standardní hodnota), funkce nijak nezpracovává nadpisy sekcí uvedené v hranatých závorkách. V opačném případě je výsledkem funkce vícerozměrné pole, kde první index je tvořen názvem sekce a druhý názvem konstanty. V tomto případě by pole po výpisu funkcí print_r() vypadalo následovně:

Array
(
  [prvni cast] => Array
    (
      [number_of_users] => 2
      [checkIP] =>
    )
  [druha cast] => Array
    (
      [nick] => Petr
      [prezdivka] =>
    )
)

Konfigurační funkce

Podobně jako v předchozím článku se i nyní pokusíme vytvořit jednoduchou funkci, která automaticky zaregistruje všechna data načtená ze zadaného konfiguračního souboru jako konstanty a vrátí hodnotu TRUE, resp. FALSE v případě chyby. Zde je její výpis:

function config2($loc)
{
  if (!($conf=@parse_ini_file($loc)))
  {
    return 0;
  }
  else
  {
    foreach($conf as $key => $value)
    {
      if (!defined($key))
      {
        define($key, $value);
      }
    }
    return 1;
  }
}

Tuto funkci asi není nutno příliš komentovat. Nejdříve načte pomocí popsaného parseru parse_ini_file() obsah souboru zadaného jako argument $loc do pole $conf a pak pomocí cyklu foreach zaregistruje jeho jednotlivé řádky jako konstanty.

XML nebo .INI?

V tomto a v předchozím článku jsme si ukázali dva přístupy k tvorbě konfiguračních souborů a funkcí, které je zpracovávají. Pro použití XML hovoří především jeho univerzálnost, lze jej zpracovávat i jinými prostředky, které jsou dostupné pro všechny XML aplikace, například XSLT. Oproti tomu syntaxe .ini je velmi jednoduchá, dobře čitelná a všeobecně známá. Ať už použijete kterýkoliv prostředek, nezapomínejte, že jde především o komfort uživatele, proto mu vše pořádně vysvětlete, aby se pro něj práce s vaším konfiguračním souborem nestala noční můrou.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět