Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ficheros: introduccin Las operaciones de manipulacin de ficheros tienen una gran importancia en prcticamente todos los lenguajes de programacin, ya que, generalmente, no tiene sentido una aplicacin que no sea capaz de mostrar resultados en pantalla, leer o escribir en un fichero o manipular una base de datos. A lo largo del mdulo se analizar la forma de acceder a datos almacenados en ficheros y directorios, y las diferentes formas de trabajo con dichos elementos. Las operaciones sobre ficheros suelen constar de tres fases:
Fase 1: Apertura del fichero En esta primera fase se abre el fichero, indicando si se realizarn operaciones para leer, escribir o aadir al final del mismo. La operacin devuelve un descriptor de fichero.
Fase 2: Procesamiento del fichero Dentro de esta fase se distinguen dos posibilidades, que se hubiera abierto para lectura o para escritura.
Fase 3: Cierre del fichero Una vez realizadas las correspondientes operaciones sobre el fichero, se debe proceder a su cierre.
Fase 1: Apertura del fichero La operacin de apertura del fichero se realiza con la funcin fopen(), cuya sintaxis es:
Descriptor= fopen(string fichero, string modo[, int incluye_path])
Donde: Descriptor r Es un nombre comenzando con el smbolo $ (de nomenclatura similar a las variables). nombre_fichero: representa un string con el nombre del fichero y la ruta incluida (tambin puede ser una variable de tipo String). modo_apertura es otro string con el tipo de apertura deseado. La funcin devuelve un identificador de recurso (false si la operacin no pudo realizarse correctamente), y los parmetros representan: fichero Nombre del fichero a abrir. Por ejemplo, " datos.txt" Los modos ms habituales son: r Lectura: para leer datos desde el fichero r+ Lectura/Escritura. El puntero se coloca al inicio del fichero. Escritura: para escribir datos desde el inicio del fichero (el contenido anterior, si existe, desaparece) Lectura/Escritura. Si no existe se crea. Si ya existe, se borra todo w+ contenido quedando a w
modo
Aadir al final: para aadir datos al final del fichero (el contenido anterior, si existe, se mantiene) Lectura/Escritura(aadir). Si no existe se crea. Si ya existe el puntero a+ se pone al final para aadir datos. incluye_path Parmetro opcional. Indica si el fichero debe buscarse en el path a Hay que tener tantos descritores como ficheros abiertos deseemos tener simultanemanete. En el caso de que el fichero no se haya podido abrir, fopen( ) devuelve FALSE. Algunos ejemplos de apertura de ficheros: funcin fopen()
// Apertura para lectura $fichero = fopen("datos.txt", 'r'); // Apertura para escritura silenciando errores con el operador @ $fichero = @fopen("datos.txt", 'w'); // Apertura para aadir, silenciando y buscando en el path $fichero = @fopen("datos.txt", 'a', true);
Una vez realizada la operacin de apertura, y antes de realizar cualquier tipo de procesamiento, se debe verificar que la operacin fopen() ha tenido xito, comprobando si el recurso devuelto se evala como verdadero (la operacin se ha realizado correctamente) o como falso (se ha producido un error al intentar abrir el fichero). Un ejemplo de esta comprobacin podra ser:
// Apertura para lectura silenciando errores con el operador @ $fichero = @fopen("/datos/datos.txt", 'r'); // Si no se ha podido abrir el fichero finaliza la ejecucin del // script devolviendo un mensaje de error if (!$fichero) or die("ERROR: no se ha podido abrir el fichero de datos"); // En caso contrario el script contina ejecutndose ...
En el ejemplo se ha empleado la funcin die(), que provoca la finalizacin de la ejecucin del script mostrando el mensaje recibido como parmetro. Fase 2: Procesamiento del fichero Dentro de esta segunda fase se distinguen dos posibilidades, que se hubiera abierto para lectura o para escritura. Las funciones que suelen emplearse ms habitualmente son: Modo Funcin utilizada
string fgets(resource fichero[, int longitud])
r Lee de fichero el nmero de caracteres indicado en el parmetro longitud, o (ficheros de texto) hasta un carcter de fin de lnea (que es includo), o hasta fin de fichero r
string fread(resource fichero, int longitud)
(ficheros binarios) Lee de fichero el nmero de bytes indicado en el parmetro longitud (o hasta fin de fichero) NOTA: en sistemas Windows el fichero debe abrirse en modo 'rb'
int fwrite(resource fichero, string cadena[, int longitud])
wa
Escribe en fichero los caracteres proporcionados en el parmetro cadena. Si se aade el parmetro longitud, escribe hasta que termine la cadena o hasta que se alcancen los caracteres indicados en este ltimo parmetro, lo que antes ocurra. Devuelve el nmero de caracteres escrito
Fase 3: Cierre del fichero Para cerrar el fichero, simplemente se precisa la funcin fclose(), indicndole el recurso que apunta al fichero. Devuelve true si la operacin tiene xito, false en caso contrario. La sintaxis de la funcin es:
bool fclose(resource fichero)
Spuntero = fopen(. . . . ); ... $linea=Jose Angel; fputs($puntero, $linea . "\n"); El uso de los salto de lnea tiene sentido cuando se van a efectuar lecturas posteriores con fgets.
7.- FUNCIONES DE MANTENIMIENTO (COPIA, RENOMBRADO Y BORRADO) DE FICHEROS: copy (origen, destino) Copia ficheros, si no hay error devuelve TRUE. Los dos parmetros deben representar el nombre antiguo y el nuevo con sus rutas correspondientes. rename (nombre_antiguo, nombre_nuevo); Trata de renombra un fichero o directorio devuelve TRUE en caso de xito. En el caso de que se indiquen rutas distintas se proceder a mover el fichero. unlink(nombre_fichero); Borra un fichero. Devuelve TRUE si la operacin se efectu con xito. move_uploaded_file(nombre_fichero, destino) Sirve para mover un archivo cargado, mediante el mecanismo POST del HTTP (Etiqueta Input type=fileupload de los formularios HTML). Devuelve FALSE si ocurre cualquier tipo de error. (* Ver tema posterior). 8.- FUNCIONES DE MANTENIMIENTO (CREAR, CAMBIAR, BORRAR) DE DIRECTORIOS: En todas las funciones, el nombre_directorio es un string. mkdir (nombre_directorio, [permisos]); Crea un directorio con los permisos indicados. Devuelve FALSE si no se ha podido crear. Los permisos hay que ponerlos en modo octal asi que se debe poner un 0 delante. Por ejemplo 0700. rmdir(nombre_directorio); Remueve un directorio. El directorio debe estar vaco y tener los permisos adecuados. Si no es posible devuelve FALSE. chdir(nombre_directorio); Cambia de directorio. 9.- MANEJO DE DIRECTORIOS EN PHP: Para poder operaciones sobre la totalidad de elementos de un directorio, PHP dispone de un sistema similar al de la apertura de archivos. Hay que crear un manejador o descriptor de directorios que representa una conexin lgica con el directorio indicado: descriptor = opendir(ruta del directorio) Ejemplo $midir = opendir("/ejemplos/casa") Una vez establecido este manejador disponemos de las siguientes funciones: readdir(manejador); Devuelve una cadena con un elemento del directorio cada vez que se le invoca. Tambin se incluyen los nombres de directorio actual (.) y del directorio padre ( . . ). Cuando no existan ms elementos o en caso de error, esta funcin devuelve FALSE.
rewinddir(manejador); Sirve para volver a procesar (rebobinar) un directorio desde su primera entrada. Esta funcin no devuelve ningn valor. closedir(manejador); Sirve para liberar el manejador, una vez que se ha terminado el trabajo con los directorios. 9.1.- Ejemplo de uso de funciones de manejo de directorios: <?php $midir= opendir("."); // El punto significa directorio actual. echo "Elementos del directrio actual <BR> "; rewinddir($midir); // No es necesario en este caso while ($elemento = readdir($midir) ) { echo "$elemento <BR>\n"; } closedir($midir); ?> Hay que tener cuidado con la sintaxis, por ejemplo para el directorio raiz de la unidad C en Windows sera necesario escapar la barra $midir= opendir("C:\\"); php0205.php