14. Lectura de fitxers línia a línia

Índex

 

Introducció

El PHP permet desar dades estructurades en fitxers de text (.txt o millor .php); posteriorment aquestes dades són recuperades i aprofitades amb finalitats diverses. La lectura de les dades es fa línia a línia; l'escriptura es pot fer línia a línia, per la càrrega de tot el fitxer en bloc, o pot formar part del web amb caràcter fix.

Les actuacions línia a línia sobre un fitxer sempre comporten tres operacions:

La funció fopen() fa servir dos arguments: en el primer s'indica l'arxiu sobre el qual s'actua, i en el segon s'indica el mode. Hi ha tres modes, "r" (lectura), "w" (escriptura) i "a" (escriptura afegida al contingut anterior).

La funció fopen() s'usa així:

L'identificador $ctrl (de nom arbitrari) és una variable que es fa servir com referència en la resta del programa fins al moment de tancar-lo. Podem concebre-la com el nom del fitxer un cop obert.

Notem que aquest procediment és molt més potent i flexible que el vist anteriorment que col·loca totes les dades en una sola línia i les interpreta amb explode i list.

 

Lectura de documents línia a línia

Un cop obert el fitxer en mode r, la lectura es fa amb la funció fgets(), que s'aplica tantes vegades com línies tingui el fitxer:

Es pot afegir un segon argument a fgets() que indiqui la mida màxima de cada lectura:

fa que els fragments llegits tinguin com a màxim 99 bytes.

Suposem una sèrie de dades i referències sobre el planeta Saturn, inclosa una imatge, col·locades ordenadament en un fitxer; un segon fitxer conté el programa que en fa la lectura i la presentació.



Vegeu-ne el resultat

Fer una lectura d'un fitxer coneixent-ne el nombre de línies és, en realitat, de molt poca utilitat. En el cas més general no coneixem el nombre de línies; aleshores cal establir un programa de lectura en bucle, combinant while(), que controla l'execució reiterada, amb la funció feof(), que detecta el final del fitxer:

 

Acumulació de dades de diversos àmbits i selecció des de fora

Si, mitjançant un formulari o un altre recurs, introduïm en el programa un valor $valor d'un camp, podem seleccionar només els registres que ccompleixen un determinat requisit





Vegeu-ne el resultat

 

Aplicació a petites bases de dades

Cada una de les línies del fitxer pot ésser estructurada, a més, en diverses seccions, mitjançant un caràcter - o seqüència de caràcters - de separació. Hi combinem doncs els dos procediments, fgets de lectura seqüencial i list + explode. D'aquesta manera el fitxer equival a una taula de dades: cada línia és un registre i cada secció un camp.



Vegeu-ne el resultat

Són possibles moltes combinacions:

Cal advertir però que aquest mètode resulta molt poc eficient, i només s'hauria de fer servir en bases de dades molt petites. Per a les bases de dades grans es fa servir el MySQL.