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 podmienkamiStiahnuté 23x (1.6 kB)