dimecres, 23 d’octubre del 2013

Tractament de fitxers a PHP



PHP permet desar dades estructurades en fitxers de text;

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.

Tenim 3 operacions principals:

  • Obrir el fitxer amb la funció fopen().
  • Fer l'actuació corresponent de lectura, amb fgets(), o d'escriptura, amb fputs().
  • Tancar el fitxer amb la funció fclose(). Cal sempre tancar els fitxers que obrim.
La funció fopen() fa servir dos arguments: 
  • en el primer s'indica l'arxiu sobre el qual s'actua,
  • en el segon s'indica el mode.

Hi ha tres modes principals:

 "r" (lectura),

 "w" (escriptura)

 "a" (escriptura afegida al contingut anterior).

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

$ctrl = fopen("$nom_de_l'arxiu","mode")

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

Exemple:



<html>
<head>
<title> Exemple Fitxers </ title>
</head>
<body>
<?php
   $fitxer = fopen ("dades.txt", "r") or
     die ("No s'ha pogut obrir el fitxer");
   while (!feof($fitxer))
   {
     $linia = fgets(
$fitxer);
     $lineasalt = nl2br($linia);
     echo
$lineasalt;
   }
   fclose ($fitxer);
   ?>
 </body></html>

Explicació del codi:
El primer que hem d'identificar és la forma d'obertura de l'arxiu:
$fitxer = fopen ("dades.txt", "r")

El segon paràmetre de fopen és "r" és a dir read (obertura per a lectura), si el fitxer no existeix per
exemple s'executa la funció die que finalitza el programa mostrant el string corresponent.
La funció feof retorna true si s'ha arribat al final de l'arxiu en cas contrari retorna false. 
Perquè
s'imprimeixin totes les línies de l'arxiu es planteja una estructura repetitiva que s'executa mentre no
s'arribi al final d'arxiu:


while (!feof($fitxer))

Dins de l'estructura repetitiva llegim una línia completa de l'arxiu de text amb la funció fgets:

$linia = fgets($ar);

La variable $línia conté una línia completa de l'arxiu de text, fins i tot el salt de línia (\ n)
Com el navegador no fa un salt de línia amb aquest caràcter, hem de convertir aquest caràcter a la
marca <br> pròpia d'HTML. La funció que realitza aquesta activitat s'anomena nl2br (new line to br)
El resultat s'emmagatzema en una nova variable que és la que realment imprimim:

$lineasalt = nl2br($linia);echo $lineasalt;

Per obrir els fitxers:
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:


$ctrl=fopen("nom.txt","r");
$lectura = fgets($ctrl);


... instruccions sobre què fer amb les dades $lectura ...


... repetir l'estructura anterior tantes vegades com calgui ...

fclose($ctrl);
Es pot afegir un segon argument a fgets() que indiqui la mida màxima de cada lectura:
$lectura = fgets($ctrl, 100)
Fa que els fragments llegits tinguin com a màxim 99 bytes.
Es pot recórrer un fitxer amb while() i feof() que detecta el final d’un fitxer.

Exemple:

<html>

<head>
 <title>Exemple Fitxers</title>
 </head>
 <body>
<?php $fitxer=fopen("dadestxt","r")
or die(“No es troba el fitxer");

while (!feof($fitxer))

   $linia=fgets($fitxer);
    $liniasalt=nl2br($linia);
    echo $liniasalt;
}
fclose($fitxer); 

?>
 </body>

</html> 


Per llegir fitxers, dispossem de més funcions:

  • fread(): fa el mateix que fgets. Té els mateixos arguments
  • fgets() llegeix fins que troba un salt de línia.
  • fgetsc(): llegeix caràcter a caràcter.
  • file(): col.loca cada línia del fitxer en una posició d’un vector.
 Per escriure en un fitxer: 

$identificador=fopen("nom_del_fitxer","mode");
..... Creació del contingut fputs(identificador,contingut)
fclose($identificador);
fputs() fa servir dos arguments: l'identificador i el contingut. 

El contingut pot ésser:
  • Un literal.
  • Un contingut fix declarat en forma de variable.
  • Una veritable variable, procedent d'alguna funció.
  • Una variable procedent d'un formulari, recollida mitjançant $_POST['nom'] o anàleg.
  • Qualsevol combinació dels anteriors. 
 La funció fputs() té un equivalent, la funció fwrite(). 

En un obrim un fitxer, si obrim en mode "w" un document ja existent, tot el contingut anterior desapareix. Per a afegir-hi dades hem de fer servir el mode "a".
Altres funcions per tractament de fitxers:

  • copy("nom del fitxer original", "nom del fitxer destí");
  • unlink("nom del fitxer que es vol borrar");
  • rename("nom del fitxer original","nou nom del fitxer");
  • is_dir(): true si és un directori i false si no ho és o no el troba.
  • is_executable(): true si és un fitxer executable i false si no ho és o no existeix
  • is_file() : true si és un fitxer normal i false si no és un fitxer normal o no es troba.
    

Cap comentari:

Publica un comentari a l'entrada