FoxPro Reader – import fpt souborů

S databázemi ve formátu DBF se můžete setkat poměrně často. V dobách MS-DOS se hojně používaly aplikace vyvinuté ve FoxPro 2.x a někde se stále používají. Problém nastává, když je potřeba načíst z takové databáze data pomocí PHP. Přesněji řečeno, problém je s položkami datového typu memo.

Logo FoxProFormát DBF vznikal v době, kdy byly harddisky malé a drahé a šetřilo se každým bajtem. Proto se do dbf souboru ukládají jen relativně krátké údaje (čísla, varchar a boolean). Když vznikla potřeba ukládat delší texty, ve struktuře dbf souboru se na to asi nenašlo místo a proto vznikl datový typ memo. Položka neobsahuje ve sloupci s timto datovým typem přímo data, ale odkaz do externího souboru a teprve v něm se ukládají samotná data. Tento externí soubor má stejný název jako dbf soubor, ale liší se příponou. U původní dBase měl příponu dbt, u FoxPro má příponu fpt.

PHP má rozšíření pro všelijaké databáze, samozřejmě je mezi nimi i knihovna pro práci s dbf. Ta ale má jednu vadu, neumí načítat položky typu memo. Autoři asi považovali dbf za zastaralý formát a nestálo jim za námahu vymýšlet plnou podporu pro dbf.

Při vývoji jednoho eshopu jsem potřeboval automaticky načítat data z dbf souborů databáze FoxPro včetně memo položek. Nejprve jsem uvažoval o exportu dat z dbf do jiného formátu, to by ale vyžadovalo spouštění externího programu na serveru. Zkusili jste někdy přemluvit správce webhostingového serveru, aby povolil používání funkcí system() nebo exec()?

S pomocí Googlu jsem našel DBF class, který by měl umět načítat data i z memo položek, dokonce bez dBase rozšíření. Asi to umí jen z dbt souborů, protože u fpt souborů to nefungovalo. Googloval jsem dále, našel popis formátu fpt a nakonec jsem zprovoznil i načítání z fpt souborů. Výsledek mého snažení, třídu CFoxproReader si můžete stáhnout na konci článku.

V mém případě třída funguje správně, ale neměl jsem možnost ji vykoušet s různými verzemi FoxPro. Nabízím ji tak jak je, proto mi nepište abych vám ji upravil. Při jejím používání pamatujte na to, že se oba soubory (dbf i fpt) načítají do paměti, u velkých souborů můžete narazit na nastavení memory_limit. Také v této třídě neřeším převod kódování, to si musíte vyřešit sami. U dbf můžete narazit na kódování Kamenických a možná i jiné podivnosti.

Jak říká firemní heslo Oddělení stížností společnosti Sirius Cybernetics: „Berte a vychutnávejte“.

Ke stažení: foxpro-reader.tar (3.43 kB)

Aktualizovaná verze je ke stažení na githubu.

Rubriky : PHP

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Můžete používat následující HTML značky a atributy: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>