|
||||||||||||||||
Pràctica |
Exercicis
|
|||||||||||||||
|
|||||||||||||||||||||
Treball amb fitxers | |||||||||||||||||||||
En aquest pràctica treballarem amb fitxers:
|
|||||||||||||||||||||
Comptador de visites | |||||||||||||||||||||
Crearem un comptador de visites simple que a cada entrada a la pàgina mostri el nombre de visitants. Aquest valor quedarà emmagatzemat en un fitxer de text. Primerament, cal que creem aquest fitxer de text, amb la llibreta del Windows, per ex., amb el nom de compta.txt. Aquest fitxer només ha de contenir, inicialment, el número 0. El desem al directori de treball. Cal que tinguem permís de lectura i escriptura sobre compta.txt (vegeu més avall Fitxers i permisos). |
|||||||||||||||||||||
S'ha d'anar alerta amb l'editor que fem servir per crear el fitxer compta.txt. Si aquest editor insereix codis ocults, podríem tenir problemes perquè funcionés correctament el comptador. Cal tenir cura que al final del número 0 no s'hi insereixi un salt de línia o retorn de carro. | |||||||||||||||||||||
Tot seguit, creem el fitxer que generarà la pàgina del comptador. El procés que s'ha de seguir serà el següent:
El codi per aconseguir-ho seria: |
|||||||||||||||||||||
<? // Recuperem el nombre que conté el fitxer // Incrementem en 1 el nombre de visites // Anem al començament del fitxer // Escrivim nou número al fitxer // Tanquem el fitxer // Es mostra el comptador |
|||||||||||||||||||||
Llistat 7.1.1. Comptador de visites | |||||||||||||||||||||
|
|||||||||||||||||||||
Deseu aquest codi en un fitxer anomenat m7p11.php en el mateix directori on tingueu el fitxer compta.txt. Alguns comentaris:
|
|||||||||||||||||||||
|
|||||||||||||||||||||
|
|||||||||||||||||||||
|
|||||||||||||||||||||
|
|||||||||||||||||||||
Si executeu aquest codi, observareu que va augmentant el número de visites. Podeu comprovar des d'un editor de text com el contingut de compta.txt ha anat canviant. |
|||||||||||||||||||||
Com en gairebé tots els apartats que anem treballant, a més de les funcions que hem utilitzat, el PHP té un bon nombre de funcions del sistema de fitxers que poden ser molt útils: creació de directoris, extreure el nom d'un fitxer de tota la ruta, comprovar l'existència d'un fitxer o d'un directori, canviar els permisos d'un fitxer, etc. |
|||||||||||||||||||||
La funcio fopen() pot servir també per "llegir" el contingut d'una pàgina web si li passem la seva adreça url com a primer paràmetre. D'aquesta manera podem extreure'n algun contingut. | |||||||||||||||||||||
Fitxers i permisos | |||||||||||||||||||||
A l'hora d'escriure en un fitxer, cal que tinguem autorització per fer-ho. Això varia en el Windows i en el Linux. En la nostra instal·laciólocal en Windows feta amb EasyPHP, no tindrem problemes per ralitzar aquesta pràctica. Si treballem en Linux o bé volem fer una prova en aquest sistema operatiu, cal que tinguem alguna idea de com funcionen els permisos de fitxers. Sense aprofundir-hi, podem dir que en el Linux els permisos s'apliquen a fitxers o directoris i giren al voltant de dos eixos: usuaris (propietari, grup, tothom o públics) i tipus de permís (lectura, escriptura, execució).
A cada tipus de permís se li assigna un nombre. Sumant aquestes xifres podem saber el permís que té un fitxer i, a la inversa, quina xifra hem d'assignar al permís. Per exemple: per donar permís de lectura i escriptura a un fitxer li assignarem un permís 666. La majoria de programes clients d'FTP faciliten l'assignació d'aquests permisos amb quadres referits a les propietats o atributs dels fitxers. Per exemple, en el programa client FileZilla si cliquem amb el botó dret sobre el fitxer que es troba en el servidor (Lloc remot) i triem l'opció Atributs del fitxer... arribem a un quadre com el que es mostra a la figura 7.1.1 Figura 7.1.1: Permisos en Linux Podeu veure que al fitxer compta.txt se li assignen, efectivament, permisos d'escriptura i, per tant, podrem canviar-ne el contingut. Si, en canvi, el valor del permís fos 444, només es podria accedir a la lectura i, en conseqüència, no funcionaria la pràctica que hem explicat. Diguem, també, que aquest valor es pot establir i canviar dinàmicament per programa amb la funció chmod(), així com canviar el propietari amb chown() i canviar el grup amb chgrp(). |
|||||||||||||||||||||
Transferència de fitxers | |||||||||||||||||||||
Veurem un exemple de com enviar un fitxer al servidor
mitjançant un formulari. A diferència de la pràctica
2 del mòdul 3, utilitzarem la mateixa tècnica que hem fet
servir en el mòdul 6: la utilització d'un sol fitxer per
al formulari i el seu processament en lloc de dos fitxers separats. |
|||||||||||||||||||||
Enviar fitxers | |||||||||||||||||||||
Veurem a la pràctica el que acabem d'exposar i com podem enviar un fitxer des d'un ordinador client al servidor. Una possible aplicació pràctica d'això seria, per exemple, la tramesa d'una fotografia (de l'alumnat, del professorat...) a un directori que les contingués totes. L'script permet triar un fitxer localment (a l'ordinador de l'usuari) i enviar-lo al servidor. En aquest procés, el PHP genera també l'array associatiu $_FILES, de dues dimensions, que recollirà en la primera columna l'identificador de l'etiqueta <input> del formulari (en el nostre cas, 'fitxer') i a la segona les claus de les característiques del fitxer (nom, tipus, mida, etc.) Cal tenir en compte, també, que perquè aquest procés funcioni correctament, han d'estar ben definides les directives del php.ini que s'hi relacionen:
|
|||||||||||||||||||||
Copieu el codi següent a l'editor i deseu-lo amb el nom de m7p12.php. Després d'estudiar-lo, executeu-lo localment. | |||||||||||||||||||||
Per fer funcionar aquest codi, cal també que definiu, abans d'executar-lo en local, el directori recepcio, al mateix nivell que el script m7p12.php. Aquest directori haurà de tenir, si cal (Linux, 2000 Server...), els permisos d'escriptura i execució adequats per a poder rebre fitxers. | |||||||||||||||||||||
<?php // Recuperarem les dades del formulari (mitjançant l'array de
PHP $_POST)
//Recuperació de fitxers
<!-- a enctype definim el tipus de fitxer--> |
|||||||||||||||||||||
Llistat 7.1.2. Transferència d'un arxiu | |||||||||||||||||||||
Si observem el codi, veurem que es compon de dues parts:
|
|||||||||||||||||||||
|
|||||||||||||||||||||
Pròpiament s'executa en primer lloc la part del formulari html. Aquí cal remarcar:
|
|||||||||||||||||||||
|
|||||||||||||||||||||
|
|||||||||||||||||||||
|
|||||||||||||||||||||
Un cop executat el formulari, l'script es torna a carregar. Ara, però, la variable $boto ja tindrà un valor i, per tant, ja processarem les dades enviades. Cal remarcar que:
|
|||||||||||||||||||||
|
|||||||||||||||||||||
|
|||||||||||||||||||||
|
|||||||||||||||||||||
Cal anar molt alerta amb els scripts de transmissió de fitxers o upload i prendre algunes mesures de seguretat, com per exemple: limitar la mida dels fitxers a enviar, autoritzar només determinats tipus de fitxer (imatges, que no siguin executables...), donar permís d'ús només a determinats usuaris, etc. | |||||||||||||||||||||
|
|||||||||||||||||||||