15. Modificació de fitxers línia a línia
Índex
Permís d'escriptura
Un fitxer situat en un servidor d'Internet té, com a norma general, només permís o modede lectura. Això significa que els usuaris només el poden fer servir passivament, però no modificar-ne el contingut. Si hi accedim amb fopen(...,"w"), obtindrem una nota d'error, ja que estem intentant escriure sense permís en un fitxer. Si volem modificar-lo - per exemple, afegint-hi contingut - n'hem de modificar el mode amb la funció CHMOD. Aquesta funció es pot activar de diverses maneres:
- Amb un programa FTP. Cal anar a File > Properties (o anàleg) i canviar el paràmetres.
- Des del plafó de control (CPanel > Administrador de Fitxers > Canviar els permisos, o anàleg)
- Fent servir la funció CHMOD() de PHP.
El paràmetre mode consisteix en quatre xifres.
- Un 0
- Xifra indicativa dels permisos per al propietari.
- Xifra indicativa dels permisos per a un grup restringit associat al propietari.
- Xifra indicativa dels permisos per a tothom.
Al seu torn, les xifres indicatives de permisos resulten de la suma dels valors següents:
- 1: permís d'execució
- 2: permís de modificació
- 4: permís de lectura
Així, el número 0644 significa permís de lectura i escriptura per a l'administrador i de només lectura per a tota la resta.
Per al que segueix, el permís adequat és el 0666.
Estructura per a la modificació de documents línia a línia
Un cop obert el fitxer en mode w, la introducció del contingut es duu a terme amb la funció fputs() (una vegada o més).
- $identificador=fopen("nom_del_fitxer","mode");
- ..... Creació del contingut del fitxer, amb l'ús de 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().
- Document inicial, sense codi PHP, dotat d'un formulari per a l'establiment d'un estil personalitzat.
- <?php
-
- $mida = "14px"; // Valors per defecte
- $color = "black";
-
- if ($_POST['m'] == "gr") { // Ús de les dades procedents del formulari
- $mida = "16px";
- }else{
- if ($_POST['m'] == "pt") {
- $mida = "12px";
- }
- }
-
- if ($_POST['c'] == "bl") {
- $color = "blue";
- }else{
- if ($_POST['c'] == "vd") {
- $color = "green";
- }
- }
-
- if ($_POST['g'] == "ng") {
- $estil = "font-weight: bold";
- }
-
- if ($_POST['g'] == "cv") {
- $estil = "font-style: italic";
- }
-
- $ctrl = fopen("15c.txt","w"); // Obrir el fitxer
- fputs($ctrl,"p { font-size: " . $mida . " } \n"); // Incorporar-hi les dades elaborades
- fputs($ctrl,"p { color: " . $color . " } \n");
- fputs($ctrl,"p { " .$estil . " } \n");
- fclose($ctrl); // Tancar el fitxer
- ?>
- Document de text resultant de l'anterior, amb un contingut depenent de la tria i anàleg al següent:
-
- p { font-size: 10px }
- p { color: blue }
- p { font-weight: bold }
Feu la modificació del fitxer
- Document PHP amb la inclusió de les especificacions d'estil a HEAD.
-
- ...
- <style type="text/css">
- <?php
- include "15c.txt"; // Inclusió de les dades d'estil contingudes en el fitxer modificat
- ?>
- </style>
- ...
Vegeu el resultat de l'aplicació del fitxer modificat
Estructura per a l'ampliació de documents línia a línia
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".
- Document de text, que s'actualitza paulatinament.
- <?php
-
- $ctrl = fopen("15e.txt", "r"); // Obre el fitxer en mode de lectura
- while (!feof($ctrl)) { // Bucle i control del final
- $linia = fgets($ctrl, 4096); // Lectura línia a línia
- list($a,$b) = split(' ¬ ',$linia); // Manipulació
- echo '<tr>';
- echo '<td class="aut">' . $a . '</td>'; // Presentació del contingut
- echo '<td class="com">' . $b . '</td>';
- echo '</tr>';
- } // Fi del bucle
- fclose($ctrl); // Tancament del fitxer
-
- ?>
-
- A continuació, amb codi HTML, es sol·licita un nom i un comentari, que seran afegits als existents.
- <?php
-
- $ctrl = fopen("15e.txt", "a"); // Obre el fitxer en mode a
- $linia = $_POST['nom'] . " ¬ " . $_POST['com']; // Rep les dades noves
- $linia = stripcslashes($linia);
- $linia = "\n" . $linia;
- fputs($ctrl,$linia); // Les afegeix al contingut anterior
- fclose($ctrl); // Tanca el fitxer
-
- ?>
-
- A continuació, amb un copi PHP idèntic al del document anterior, torna a presentar el contingut, ara ampliat.
Vegeu-ne el resultat
- Nota: Atesa la finalitat didàctica d'aquest exemple, el segon document PHP conté, a més, un programa final, que restaura el contingut inicial del document de text. No és possible, doncs, d'actuar-hi reiteradament.