Jak pracovat se soubory ve formátu DBF v PHP 1.
Jazyk PHP nabízí mimo jiné i několik funkcí umožňujících pracovat se soubory ve formátu DBF. Tento formát je podporován v naprosté většině tabukových kalkulátorů a desktopových databází. V prvním dílu tohoto seriálu si ukážeme, v jakých případech se hodí použít formátu DBF, a také si vytvoříme jednoduchý skript umožňující prohlédnout obsah zadaného DBF souboru přes www rozhraní.
Využívat PHP skripty, které přistupují k datům ve formátu DBF, je výhodné v situacích, kdy:
- potřebujeme publikovat na www stránce data, která vytváříme a uchováváme např. v nějaké desktopové databázi.
- naše www stránky jsou generovány PHP skriptem z dat uložených v databázi na SQL serveru a rádi bychom zmíněnou databázi (najednou) naplnili daty vytvořenými např. MS Excel.
- chceme, aby výstupem skriptu, který získává data z SQL serveru, nebyla www stránka, ale soubor v takovém formátu, abychom jej v zápětí mohli dále zpracovat ve spreadsheetu.
V takových případech lze sice v principu využít ODBC rozhraní a ODBC funkcí jazyka PHP, nicméně vhodné ovladače nebývají vždy k dispozici (zejména v prostředí OS Unix/Linux), navíc konfigurace daného ovladače nebývá vždy snadnou záležitostí. Řešení založené na PHP skriptech a formátu DBF je často mnohem jednodušší.
K tomu, abychom mohli volat v našich PHP skriptech funkce dbase_*, je nutné provést jistou úpravu v souboru php.ini (odstraníme středník před direktivou extension=php_dbase.dll) – to v případě, že pracujeme pod Windows. Používáme-li PHP v prostředí OS Unix/Linux, je nutné PHP zkompilovat s příslušnými parametry (více se dozvíte v nápovědě k příslušné verzi PHP).
Jak tedy vytvořit jednoduchý prohlížeč DBF souborů?
Podívejme se nejprve na funkce, které nám PHP k tomuto účelu nabízí:
- dbase_open(string název_souboru, int režim) otevře databázi uloženou v zadaném souboru. Druhým parametrem určíme způsob otevření – přípustné hodnoty 0, 1, 2 značí (po řadě): pouze pro čtení, pouze pro zápis, pro čtení i zápis. Jestliže se databázi podařilo otevřít, vrací funkce identifikátor databáze, v opačném případě vrací false.
- dbase_numrecords(int identifikátor_databáze) zjistí počet záznamů v databázi. (Identifikátor získáme pomocí funkce dbase_open.)
- dbase_numfields(int identifikátor_databáze) vrací počet sloupců v otevřené databázi.
- dbase_get_record(int identifikátor_databáze, int i) vrací pole (indexované od nuly) odpovídající i-tému záznamu. Toto pole navíc obsahuje asociativní index "deleteted", který určuje, zda je záznam označen jako smazaný. Záznamy jsou ve formátu DBF číslovány od jedné. Obsahuje-li databáze datový typ date, převede jej PHP na typ string. Typ memo není v dbase_* funkcích jazyka PHP podporován.
- dbase_close(int identifikátor_databáze) uzavře databázový soubor.
Dále též využijeme funkci rtrim(string), která odstraní z pravé strany řetězce netisknutelné znaky. Pro úplnost ještě uveďme seznam dalších dbase_* funkcí jazyka PHP; jejich podrobnější popis se objeví v některém z dalších článků: dbase_get_records_with_names – funkce funguje obdobně jako dbase_get_record s tím rozdílem, že jednotlivé položky ukládá do asociativního pole, jehož indexy odpovídají názvům jednotlivých sloupců, dbase_add_record přidává záznam do databáze, dbase_replace_record změní zadaný záznam, dbase_delete_record označí určený záznam za smazaný, dbase_pack odstraní z databáze záznamy, které byly označeny za smazané, dbase_create vytvoří soubor ve formátu DBF.
Máme tedy už vše připravené k tomu, abychom napsali funkci vypsat_dbf_soubor(string nazev_souboru), která vypíše obsah DBF souboru do přehledné tabulky. Základní myšlenka této funkce je velmi prostá: nejprve otevřeme databázový soubor, poté zjistíme počet záznamů a počet sloupců v tabulce a v jednoduchém for-cyklu získáváme jednotlivé záznamy pomocí funkce dbase_get_record. V případě, že $zaznam["deleted"] ==1 – záznam je tedy označen jako smazaný – použijeme pro příslušný řádek tabulky jiný styl a ve 2. for-cyklu už vypisujeme jednotlivé buňky tabulky, jejichž obsah tvoří jednotlivé prvky pole $zaznam, ze kterých jsme zprava odstranili netisknutelné znaky (mezery). Po ukončení hlavního for-cyklu uzavřeme databázi a vypíšeme informace o počtu záznamů.
|
Funkce vypsat_dbf_soubor není úplně ideální, pravděpodobně nejvážnějším nedostatekem je, že funkce negeneruje záhlaví tabulky – jazyk PHP totiž nenabízí funkci, která by umožňovala snadno zjistit názvy jednotlivých sloupců. Tato nevýhoda by se dala odstranit např. získáváním prvního záznamu z databáze pomocí funkce dbase_get_record_with_names a následným zjišťováním indexů vráceného asociativního pole pomocí funkce key.
Skipt, který volá tuto funkci a generuje kompletní stránku, je už triviální.
|
Zdrojový text souboru dbase1.php, souboru vypsat.php a dvou ukázkových DBF souborů si samozřejmě můžete také stáhnout.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
AI a internetové podvody
29. října 2024 -
Proč investovat do nejvýkonnějších VPS s AMD EPYC procesory
14. června 2024 -
Nové AI modely od Open AI a Google
22. května 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024