Čtení a zápis do souborů

V současné době se pro práci s větším množstvím dat většinou využívají databáze (pokud se k nim dostaneme a zvládneme je :-) ), při malém množství dat by ale databáze byly nadbytečné a většinou postačí uložení dat do souboru. Dočasné uložení dat do souboru můžeme také využít při práci s rozsáhlou databází, aby se nemusel vícenásobně generovat stejný nebo podobný výstup z databáze. Pamatujte na to, že pro vytvoření souboru nebo zápisu do něj musíme mít příslušná práva, což by u webhostingů nemuselo platit!


Základní příkazy pro práci s obsahem souboru

V následujících příkazech bude potřeba znát název souboru, se kterým se pracuje, je možné uvádět konkrétní název (i s příponou v uvozovkách), případně i s cestou nebo URL. Výhodnější je uložit název souboru do proměnné, protože se ve scriptu bude vyskytovat vícekrát a při opravě se opraví jen hodnota proměnné, místo oprav všech výskytů názvů ve skriptu. Navíc často je název nějakým způsobem ve skriptu generovaný, to už by bez proměnné prakticky nešlo.
U uvedených příkladů příkazů se tedy předpokládá nejprve určení hodnoty proměnné použité pro název souboru, například:
$filename="pokus.dat";

file_exists($filename) - ověření existence souboru daného názvu, výsledkem je true nebo false

Pro čtení nebo zápis do souboru je potřeba nejprve vytvořit tzv. ukazatel (neboli deskriptor či popisovač) na konkrétní soubor, ten lze vytvořit jen při otevření souboru funkcí fopen (vrací false pokud soubor nebyl otevřen), například:
$fp=FOpen($filename,"r+"); - otevření souboru s daným názvem a režimem a zároveň vytvoření ukazatele $fp.
Režimů pro otevření souboru je šest (r, r+, w, w+, a, a+ - zkratky slov read, write, append) liší se vlastnostmi podle přehledu:
 režim  čtení  zápis  obsah 
"r"anonezachová
"r+"anoanozachová
"w"neanovymaže (vytváří nový soubor)
"w+"anoanovymaže
"a"neanozachová (připisuje na konec)
"a+"anoanozachová

FClose($fp); - zavření souboru (je určen ukazatelem - viz výše)

Čtení ze souboru nebo zápis do souboru probíhá v závislosti na režimu zvoleném při otevření souboru, viz vlastnosti v tabulce výše.

FRead($fp,10) nebo FGets($fp,10) - čtení daného počtu bytů ze souboru, (fgets čte po řádcích)
pokud bychom měli obavy, že nedojde k načtení celého souboru, můžeme využít funkci filesize(soubor) - velikost souboru, například:
FRead($fp,filesize($filename))

Fwrite($fp,$hits); nebo FPuts($fp,$hits); - zapíše do souboru s ukazatelem $fp hodnotu proměnné $hits (nenastavíme-li aktuální pozici na začátek, viz další příkaz, potom se připisuje na konec)

Rewind($fp); - nastavení aktuální pozice souboru na začátek

Jednoduché počítadlo přístupů na stránku může být právě jeden z případů, kdy by byly databáze nadbytečné, protože budeme ukládat a číst jediné číslo.

Jednoduché počítadlo přístupů na stránku

Protože je script poměrně jednoduchý, spolehnu se na to, že vám k vysvětlení budou stačit komentáře v jeho zdroji (samozřejmě s pochopením výše uvedených příkazů):

<?php
$filename="pokus.dat";
if (file_exists($filename)): //jestliže existuje soubor pokus.dat
$fp=fopen($filename,"r+"); //otevři soubor pro čtení i zápis
$hits=FRead($fp,filesize($filename))+1; //do proměnné $hits načti obsah souboru zvětšený o 1
Rewind($fp); //skoč na začátek souboru
else: //jinak (neexistuje soubor pokus.dat)
$fp=FOpen($filename,"w"); //vytvoř nový soubor
$hits=1; //do proměnné $hits vlož 1
endif; //protože jsme místo složených závorek použili dvojtečku, musíme uvést endif
Fwrite($fp,$hits); //zapiš hodnotu proměnné $hits do souboru
FClose($fp); //zavři soubor
echo $hits; //vypiš hodnotu proměnné
?>


Úkoly:

Úkol (2 body)

Vlož na svůj index počítadlo přístupů podle lekce. Uprav jeho vzhled, například aby byl počet vepsaný v obdélníku s vybranou barvou pozadí, případně rámečkem.

Název školy:Základní škola, Hradec Králové, M. Horákové 258
Název projektu:EU peníze školám
Číslo projektu:CZ.1.07/1.4.00/21.2575
Téma:Programování v PHP
Název:VY_32_INOVACE_11_10A_PHP11
Autor:Pavel Petr
Použité zdroje: Není-li uvedeno jinak, jsou všechny ilustrační obrázky dílem autora.