Lekce 1 - Úvod do práce se soubory v PHP
Vítejte u první lekce kurzu zabývajícího se prací se soubory v jazyce PHP. V tomto kurzu si ukážeme, jak číst, zapisovat a zpracovávat různé typy souborů v PHP. Nejdříve ale musíme získat teoretické základy a objasnit si některé pojmy.
Proč potřebujeme soubory?
Veškerá data obsažená v proměnných jsou uložena v paměti RAM. Velkou výhodou je, že se rychle čtou a zapisují, nicméně po ukončení běhu skriptu se nám navždy ztratí. Co když tvoříme třeba návštěvní knihu a potřebujeme si uchovávat záznamy? Pro trvalé ukládání dat používáme právě soubory.
Typy souborů
Veškeré soubory dělíme na:
- textové a
- binární
Textové soubory
V textových souborech jsou data uložena tak, aby byla lidsky čitelná a šla otevřít v textových editorech (např. v Poznámkovém bloku). Textové soubory mohou někdy být zpracovatelné i strojově. V takovém případě mluvíme o souborech strukturovaných. V opačném případě se jedná o soubory nestrukturované.
Strukturované textové soubory
Obsah strukturovaných souborů je uspořádán tak, aby program věděl, jak ho má interpretovat. Dělí se na tzv. ploché soubory a hierarchické. Mezi těmito typy vybíráme podle „složitosti“ dat, které chceme uložit. Se všemi níže zmiňovanými formáty umí PHP pracovat pomocí vestavěných funkcí.
Ploché soubory (flat files) vs. hierarchické
Mezi jednoduché formy strukturovaných souborů patří tzv. ploché soubory (flat files), kde se většinou pracuje s oddělovači, které oddělují jednotlivé hodnoty primitivních datových typů (čísla, booleovské hodnoty true/false, řetězce). Jestliže chceme do souborů ukládat i stromové datové struktury, jako např. pole nebo objekty, musíme použít tzv. hierarchické soubory. Zde se způsob ukládání dat mezi formáty dosti liší.
Soubory CSV
Nejčastěji používaný formát plochých souborů je CSV (Comma Separated Values). Jako oddělovače používáme čárku či středník a jednotlivé záznamy dáváme na samostatné řádky:
"Jan Novák",21,Programátor "Marie Svobodová",45,Prodavačka "Tomáš Procházka",27,Učitel
Soubory XML
Hierarchický formát XML (eXtensible Markup Language) nápadně připomíná svou vnitřní strukturou HTML. V dnešní době jsou spíše nahrazovány formátem JSON, který je kratší a jednodušší:
<?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>
Soubory JSON
JSON (JavaScript Object Notation) je dnes asi nejpoužívanější formát hierarchických souborů. Již název formátu napovídá, že je zápis JSONu shodný se zápisem objektů v JavaScriptu. Ne-ASCII znaky v řetězcích musí být tzv. escapovány, jak vidíme na příkladu. Je tomu tak z důvodu lepší přenositelnosti:
[ { "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" } ]
Nestrukturované textové soubory
Nestrukturované textové soubory, též nazývané prostý text,
jsou určeny pouze ke čtení lidmi a nedají se programově zpracovat.
Označujeme tak například dopis napsaný v Poznámkovém bloku. Přípona
těchto souborů je standardně .txt
:
Ahoj, jmenuji se Pavel a je mi 26 let. Pracuji jako programátor v jedné nejmenované pražské firmě. Programování je zároveň mým největším koníčkem. Mimo to rád plavu a sleduji seriály. Myslíš, že bychom se mohli někdy sejít? Měj se hezky, Pavel
Binární soubory
Data můžeme uložit také v tzv. binární formě. Ve své podstatě se jedná pouze o otisk určité části paměti RAM. Tyto soubory nejsou lidsky čitelné, nelze je otevřít textovým editorem a jsou vždy strukturované. V této podobě jsou na disku uložené například obrázky a videa. V PHP se se zpracováním těchto souborů setkáme málokdy a proto se jimi v této lekci nebudeme dopodrobna zabývat.
Cesty a názvy souborů
Jak víme, tak soubory se na disku ukládají do složek. Složky mohou obsahovat podsložky a vzniká nám tak hierarchická/stromová struktura. Když budeme pracovat se soubory, budeme muset dát PHP informaci, kde (v jaké složce) má soubor hledat. Toho docílíme tak, že funkci, která bude se souborem provádět nějakou činnost (čtení, zápis, …), předáme cestu k požadovanému souboru. Tyto cesty mohou být absolutní nebo relativní.
Relativní cesty
Název může napovídat, že relativní cesta k souboru se bude k něčemu vztahovat. V případě PHP se relativní cesta vztahuje vždy ke složce, kde se nachází náš skript:
soubor.txt nejaka-slozka/soubor.txt ../soubor.txt ../dalsi-slozka/soubor.txt
V prvním a nejjednodušším příkladu označujeme soubor s názvem
soubor.txt
v aktuální složce, v druhém označujeme soubor,
který se nachází ve složce nejaka-slozka/
(která je v
aktuální složce), ve třetím soubor v hierarchii o jednu složku výše a v
posledním soubor, který se nachází ve složce dalsi-slozka/
,
která se nachází o jednu složku výše.
Můžeme si všimnout, že jako oddělovače složek používáme normální
lomítka (/
) a nikoliv lomítka zpětná (\
), jako je
to běžné na OS Windows. Na webhostingu a na serverech obecně je totiž v
naprosté většině případů operační systém Linux, kde se pro
oddělování složek používají právě klasická lomítka a zpětná
lomítka se používat nedají. Naopak to ale funguje.
Pokud si s tím nechcete příliš lámat hlavu, tak je nejdůležitější vědět, že jestliže budeme na soubor referovat pouze jeho názvem, PHP ho bude hledat ve složce, kde máme PHP skript nahraný.
Absolutní cesty
Tyto cesty se k žádné další složce nevztahují a píšeme je celé, od
tzv. kořenové složky (v případě Windows je to písmeno disku, v případě
Linuxu složka /
). Tento typ cest si zde uvedeme jen pro
kompletnost, protože bych je v PHP nedoporučoval používat. Náš web totiž
můžeme přesouvat mezi různými servery, kde bude absolutní cesta ke složce
s naším webem zcela jiná a zbytečně bychom si tak přidělávali problémy.
Mohlo by se stát to, že po přesunu webu by naše PHP skripty hledaly soubor
někde, kde není nebo v horším případě v nějakém cizím prostoru Absolutní cesta může vypadat
třeba takto:
/var/www/html/mujweb.cz/soubor.txt C:\Apache2\htdocs\mujweb.cz\soubor.txt
To by pro dnešní lekci bylo vše
V příští lekci, Práce s textovými soubory v PHP, si ukážeme, jak číst a zapisovat textové soubory.