1. diel - Úvod do práce so súbormi v PHP
Vitajte u prvej lekcie kurzu zaoberajúceho sa prácou so súbormi v jazyku PHP. V tomto kurze si ukážeme, ako čítať, zapisovať a spracovávať rôzne typy súborov v PHP. Najskôr ale musíme získať teoretické základy a objasniť si niektoré pojmy.
Prečo potrebujeme súbory?
Všetky dáta obsiahnuté v premenných sú uložené v pamäti RAM. Veľkou výhodou je, že sa rýchlo čítajú a zapisujú, avšak po ukončení behu skriptu sa nám navždy stratí. Čo keď tvoríme potrebné návštevnú knihu a potrebujeme si uchovávať záznamy? Pre trvalé ukladanie dát používame práve súbory.
Typy súborov
Všetky súbory delíme na:
- textové a
- binárne
Textové súbory
V textových súboroch sú dáta uložené tak, aby bola ľudsky čitateľná a šla otvoriť v textových editoroch (napr. V Poznámkový blok). Textové súbory môžu niekedy byť spracovateľné aj strojovo. V takomto prípade hovoríme o súboroch štruktúrovaných. V opačnom prípade sa jedná o súbory neštruktúrované.
Štruktúrované textové súbory
Obsah štruktúrovaných súborov je usporiadaný tak, aby program vedel, ako ho má interpretovať. Delí sa na tzv. Ploché súbory a hierarchické. Medzi týmito typmi vyberáme podľa "zložitosti" dát, ktoré chceme uložiť. So všetkými nižšie spomínanými formátmi vie PHP pracovať pomocou vstavaných funkcií.
Ploché súbory (flat files) vs. hierarchickej
Medzi jednoduché formy štruktúrovaných súborov patria tzv.
Ploché súbory (flat files), kde sa väčšinou pracuje s
oddeľovačmi, ktoré oddeľujú jednotlivé hodnoty primitívnych dátových
typov (čísla, boolovské hodnoty true
/ false
,
reťazca). Ak chceme do súborov ukladať aj stromovej dátové štruktúry, ako
napr. Polia alebo objekty, musíme použiť tzv. Hierarchické
súbory. Tu sa spôsob ukladania dát medzi formátmi dosť
líšia.
Súbory CSV
Najčastejšie používaný formát plochých súborov je CSV (C Omma S eparated V alues). Ako oddeľovača používame čiarku či bodkočiarka a jednotlivé záznamy dávame na samostatné riadky:
"Jan Novák",21,Programátor "Marie Svobodová",45,Prodavačka "Tomáš Procházka",27,Učitel
Súbory XML
Hierarchický formát XML (e X tensible M arkup L Anguage) nápadne pripomína svojou vnútornou štruktúrou HTML. V dnešnej dobe sú skôr nahradzované formátom JSON, ktorý je kratšia a jednoduchšia:
<?xml version="1.0" encoding="UTF-8" ?> <lide> <clovek> <jmeno>Jan Novák</jmeno> <vek>21</vek> <povolani>Programátor</povolani> </clovek> <clovek> <jmeno>Marie Svobodová</jmeno> <vek>45</vek> <povolani>Prodavačka</povolani> </clovek> <clovek> <jmeno>Tomáš Procházka</jmeno> <vek>27</vek> <povolani>Učitel</povolani> </clovek> </lide>
Súbory JSON
JSON (J ava S Cripta O bject N otation) je dnes asi najpoužívanejší formát hierarchických súborov. Už názov formátu napovedá, že je zápis JSON zhodný so zápisom objektov v JavaScripte. Ne-ASCII znakmi v reťazcoch musí byť tzv. Uvádzacích, ako vidíme na príklade. Je tomu tak z dôvodu lepšej prenosnosti:
[ { "jmeno": "Jan Nov\u00e1k", "vek": 21, "povolani": "Program\u00e1tor" }, { "jmeno": "Marie Svobodov\u00e1", "vek": 45, "povolani": "Prodava\u010dka" }, { "jmeno": "Tom\u00e1\u0161 Proch\u00e1zka", "vek": 27, "povolani": "U\u010ditel" } ]
Neštruktúrované textové súbory
Neštruktúrované textové súbory, tiež nazývané obyčajný
text, sú určené len na čítanie ľuďmi a nedajú sa programovo
spracovať. Označujeme tak napríklad list napísaný v Poznámkový blok.
Prípona týchto súborov je štandardne .txt
:
Ahoj, volám sa Pavol a mám 26 rokov. Pracujem ako programátor v jednej nemenovanej pražskej firme. Programovanie je zároveň mojím najväčším koníčkom. Mimo to rád plávam a sledujem seriály. Myslíš, že by sme sa mohli niekedy stretnúť? Maj sa pekne, Pavol
Binárne súbory
Dáta môžeme uložiť aj v tzv. Binárnej forme. Vo svojej podstate sa jedná len o odtlačok určitej časti pamäte RAM. Tieto súbory nie sú ľudsky čitateľné, nemožno ich otvoriť textovým editorom a sú vždy štruktúrované. V tejto podobe sú na disku uložené napríklad obrázky a videá. V PHP sa so spracovaním týchto súborov stretneme málokedy a preto sa nimi v tejto lekcii nebudeme dopodrobna zaoberať.
Cesty a názvy súborov
Ako vieme, tak súbory sa na disku ukladajú do priečinkov. Zložky môžu obsahovať podpriečinky a vzniká nám tak hierarchická / stromová štruktúra. Keď budeme pracovať so súbormi, budeme musieť dať PHP informáciu, kde (v akej zložke) má súbor hľadať. To docielime tak, že funkciu, ktorá bude so súborom vykonávať nejakú činnosť (čítanie, zápis, ...), odovzdáme cestu k požadovanému súboru. Tieto cesty môžu byť absolútny alebo relatívny.
Relatívne cesty
Názov môže napovedať, že relatívna cesta k súboru sa bude k niečomu vzťahovať. V prípade PHP sa relatívna cesta vzťahuje vždy k priečinku, kde sa nachádza náš skript:
soubor.txt nejaka-slozka/soubor.txt ../soubor.txt ../dalsi-slozka/soubor.txt
V prvom a najjednoduchším príkladu označujeme súbor s názvom
soubor.txt
v aktuálnej zložke, v druhom označujeme súbor,
ktorý sa nachádza v priečinku nejaka-slozka
(ktorá je v
aktuálnej zložke), v treťom súbor v hierarchii o jednu zložku vyššie a v
poslednom súbor , ktorý sa nachádza v priečinku dalsi-slozka
,
ktorá sa nachádza o jednu zložku vyššie.
Môžeme si všimnúť, že ako oddeľovače zložiek používame normálny
lomky (/
) a nie lomítka spätná (\
), ako je to
bežné na OS Windows. Na webhostingu a na serveroch všeobecne je totiž v
naprostej väčšine prípadov operačný systém Linux, kde sa na oddeľovanie
zložiek používajú práve klasická lomky a spätné lomítka sa používať
nedajú. Naopak to ale funguje.:-)
Ak si s tým nechcete príliš lámať hlavu, tak je najdôležitejšie vedieť, že ak budeme na súbor referovať iba jeho názvom, PHP ho bude hľadať v priečinku, kde máme PHP skript nahraný.
Absolútnej cesty
Tieto cesty sa k žiadnej ďalšej zložke nevzťahujú a píšeme je celé,
od tzv. Koreňovej zložky (v prípade Windows je to písmeno disku, v prípade
Linuxu zložka /
). Tento typ ciest si tu uvedieme len pre
kompletnosť, pretože by som ich v PHP neodporúčal používať. Náš web
totiž môžeme presúvať medzi rôznymi servermi, kde bude absolútna cesta k
priečinku s naším webom úplne iná a zbytočne by sme si tak pridávala
problémy. Mohlo by sa stať to, že po presune webe by naše PHP skripty
hľadali súbor niekde, kde nie je, alebo v horšom prípade v nejakom cudzom
priestore:) Absolútna cesta môže vyzerať napríklad takto:
/var/www/html/mujweb.cz/soubor.txt C:\Apache2\htdocs\mujweb.cz\soubor.txt
To by pre dnešné lekciu bolo všetko:)
V budúcej lekcii, Práca s textovými súbormi v PHP , si ukážeme, ako čítať a zapisovať (nielen) neštruktúrované textové súbory.