23. 9. 2014

PHP - základná práca so súbormi

Napriek silnému využívaniu databáz dynamickými stránkami sa pre menšie zoznamy dát dá použiť aj obyčajný textový súbor s oddeľovačmi.
Súbory sú používané aj pri rôznych technikách cacheovania, keď sa vygeneruje statický súbor raz a číta sa opakovane bez generovania až do uplynutia nastaveného času.


Počítadlo návštev


Jednoduché počítadlo počtu návštev je dobrý príklad pre použitie súboru.
Súboru pridelíme premennú príkazom fopen, ktorým určíme aký súbor otvoriť, či na čítanie (r), zápis.(w), pripisovanie (a), alebo čítanie aj zápis (r+).

// POCITADLO
$filename = 'pocitadlo.log';
$fp = fopen( $filename,"r");
$counter = fread($fp, filesize($filename) ); // read in value
fclose( $fp );

++$counter; // increase the counter by one
$fp = fopen( $filename,"w");
fwrite( $fp, $counter);
fclose( $fp );

print 'POČET ZOBRAZENÍ: '.$counter;


Pri počítadle najskôr načítame predchádzajúci počet návštev do premennej (funkcia fread / fgets). Funkcia fread číta pevne stanovený "binárny" buffer, fgets číta "textový" riadok, v tomto prípade sú použiteľné obe.
Číslo v načítanej premennej zvýšime o jednu a otvoríme súbor pre zápis (w - chceme existujúci prepísať) a prepíšeme príkazom fwrite pôvodnú hodnotu zvýšenou.
Na záver ešte vypíšeme počet návštev na stránke.


Práca s dátami v súbore


Súbor možno použiť pre uloženie dát napríklad v známom tvare s oddeľovačmi medzi poliami (bodkočiarka) a oddeľovačom riadkov (enter) ako oddelenie poľa. Excel umožňuje export do takéhoto súboru s koncovkou CSV (comma separated values).
Príklad z načítania otázok a správnych odpovedí na vodičský preukaz z pevne definovaného CSV súboru:

$fz = fopen("vodicak.csv","r") or die("nepodarilo sa načítať súbor s otázkami");
$data = "";
while(!feof($fz)) { $data .= fgets($fz, 1024); }
fclose($fz);
$values = explode(";", $data); unset($data);

Otvoríme csv súbor na čítanie, načítame v cykle s buffrom 1KB do premennej $data. Ako kontrola konca súboru je použitá funkcia feof(). Po načítaní súbor zavrieme.
Premennú data rozdelíme do poľa funkciou explode. Táto funkcia naplní premennú $values, prvým prvkom bude $values[0], následne $values[1] atď.
Ide o jednorozmerné pole, preto je cyklenie v ňom potrebné robiť násobkami počtu stĺpcov súboru.

Príklad pre 944 riadkový súbor z 10 stĺpcami:

for ($x = 0; $x <= 944; $x++) {
$p = $x * 10;
$cislo = $values [ $p];
$otazka = $values [ $p +1];
$tst = $values [ $p +9];



Záver


Pre malé projekty s malým počtom dát a nízkou návštevnosťou je ukladanie do súborov zjednodušením práce. Na hostingu nieje potrebné konfigurovať databázu a pripojenie do nej.
V prípade cacheovania statických stránok má zmysel pri veľkých projektoch.
Pri použití väčšieho množstva dát, zložitých operácií nad nimi, alebo veľkého počtu prístupov však súbor spomaľuje odozvu stránky oproti práci s DB.


Žiadne komentáre:

Zverejnenie komentára