Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

PHP: Databáza INIFILE

V predchádzajúcej lekcii, Práca so súbormi CSV v PHP , sme sa zoznámili s prácou so súbormi pomocou tzv. Resources, so súbormi CSV a naše znalosti sme využili v praktickom príklade.

Databáza MySQL je veľmi populárny. Najmä medzi začínajúcimi vývojármi, ale ani pokročilí jej nepohrdnú. Podporuje totiž veľkú časť štandardu SQL. SQL je vynikajúci jazyk pre prácu s databázou, ale pre niektoré úložisko typu "kľúč => hodnota" je to povestný "kanón na vrabca".

V PHP som už vyskúšal už 11 databáz s rozdielnymi vlastnosťami. Niektoré sú veľmi dobre použiteľné, niektoré vynikajúce. Tiež sa medzi nimi vyskytol odpad, po ktorom žiadny rozumný vývojár nesiahne. Aby sa však non-MySQL databázy uchytila, musí mať aspoň v niečom výraznú prednosť.

Prvá databáz, ktorú som vybral, je INIFILE. Možno ten názov niekomu pripomenie súbory s príponou "ini" vo Windows. Áno, je to ono. Obyčajný textový súbor s jednoduchou vnútornou štruktúrou v tvare "kľúč = hodnota", v ktorom sú jednotlivé záznamy oddelené novým riadkom.

V čom je taká databázy jedinečná? V jednoduchosti! Iste ste si už niekedy potrebovali poznamenať prístupové údaje k "veľkej" databázu, spísať zoznam chybových hlásení v rôznych jazykoch a pod. Pritom ste to nechceli vkladať priamo do skriptov, pretože ste chceli oddeliť program od dát.

S použitím INIFILE je to veľmi jednoduché. Proste taký text napíšete v ľubovoľnom textovom editore a necháte PHP, aby si ho prečítalo.

host=localhost
user=kit
pass=kitovoheslo
name=test

Uložil som si ho do súboru .htdata.ini. ".Ht" na začiatku názvu mi zaistí, že si tento súbor nikto nezobrazí v prehliadači. Možností pre skrytie súboru je však viac.

Tu je časť aplikácie, ktorá si túto konfiguráciu dokáže prečítať a vypísať:

<?php
$mysql=parse_ini_file('.htdata.ini');
print_r($mysql);

Áno, to je všetko. A tu je výsledok:

Array
(
    [host] => localhost
    [user] => kit
    [pass] => kitovoheslo
    [name] => test
)

Ako je vidieť, všetky hodnoty sa uložili do asociatívneho poľa $mysql pripravené na ďalšie použitie. A ako je to s rýchlosťou? Dátový súbor, ktorý mal 100 KB (2000 kľúčov) mi PHP načítal za cca 10 ms. To by som bral ako horný limit. Pre bežné použitie pri pravidelnom načítaní bude 200 kľúčov rozumná hranica. Viac konfiguračných parametrov aplikácie ani nemávajú. Pre chybové hlásenia môže byť toto limitný číslo pokojne aj vyššie.

Štruktúra dát nemusí byť len plochá, ale je možné použiť ešte jednu úroveň zanorenia:

[MySQL]
host=localhost
user=kit
pass=kitovoheslo
name=test
[PgSQL]
host=localhost
user=kit
pass=pgheslo
name=testpg

program:

<?php
$inidata=parse_ini_file('.htdata.ini',true);
print_r($inidata);

výstup:

Array
(
    [MySQL] => Array
        (
            [host] => localhost
            [user] => kit
            [pass] => kitovoheslo
            [name] => test
        )
    [PgSQL] => Array
        (
            [host] => localhost
            [user] => kit
            [pass] => pgheslo
            [name] => testpg
        )
)

Vzniklo nám dvojrozmerné asociatívne pole, ktoré by mohlo vystačiť aj pre náročných konfigurácie.

Dajú sa nájsť aj návody, ako dvojrozmerné pole zapísať do INI, ale všeobecne tento postup nemôžem odporučiť. Obvyklejšie je taký súbor pripraviť na lokálnom PC a na server nakopírovať.

Zmienil som sa o multijazyčných verziách webe. Nie je to zas tak zložité. Stačí len vytvoriť patričný počet súborov, v každom z nich bude slovník hesiel v jednom jazyku. Funkcia parse_ini_file() potom len podľa zvoleného jazyka klienta otvorí ten správny súbor a jeho obsah uloží do poľa. Potom už je len na aplikáciu, ako s obsahom poľa naloží.

Použitie tejto databázy môže byť výhodné v situáciách:

  • potrebujem načítať konfiguračné dáta, ktoré nechcem mať v súboroch .php
  • potrebujem použiť väčšinu načítaných dát, napr. do šablóny
  • dát nie je veľa
  • potrebujem jednoduchú editáciu prostým editorom
  • dáta budú použité výnimočne, napr. chybové hlásenia
  • potrebujem dáta, ktoré budú dostupné aj v prípade nedostupnosti hlavnej databázy

Existuje aj niekoľko proti:

  • dát je veľa, potrebujem čítať len niektoré
  • potrebujem vyhľadávať aj inak ako podľa primárneho kľúča
  • pořebujete často zapisovať
  • potrebujem zapisovať dáta od užívateľov (hrozí injection)
  • určite by sa našla aj ďalšie

V nasledujúcom cvičení, Riešené úlohy k 3.-4. lekciu práca so súbormi v PHP, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 23x (1.6 kB)

 

Predchádzajúci článok
Práca so súbormi CSV v PHP
Všetky články v sekcii
Práca so súbormi v PHP
Preskočiť článok
(neodporúčame)
Riešené úlohy k 3.-4. lekciu práca so súbormi v PHP
Článok pre vás napísal Kit
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Jsem spokojeným uživatelem operačních systémů založených na linuxovém jádře. Zejména openSUSE a Ubuntu. Pro psaní veškerých textů a programů používám vynikající textový editor Vim. Aplikace se snažím psát vždy v tom nejvhodnějším programovacím jazyk...
Aktivity