Desarrollo

Trabajando con ficheros – abrir y cerrar ficheros

Desarrollo PHP

Iniciamos una serie de artículos en los que hablaremos sobre cómo trabajar con ficheros en PHP en los que abordaremos cómo abrir y cerrar ficheros (en el artículo actual), leer, escribir y funciones útiles para trabajar con ellos. Pese a que el trabajo con ficheros ha ido decayendo por el aumento de la utilización de las bases de datos, conocer la funcionalidad puede ayudarnos para cosas sencillas o para generar ficheros textuales muy simples que podemos compartir.

Aunque estos artículos no serán muy extensos, sí esperamos que sean útiles para conocer esta funcionalidad y poder así crear ficheros de texto fácil y cómodamente. Podéis ver toda la programación de estos artículos en el índice de contenidos. Empecemos a conocer cómo abrir y cerrar ficheros.

¿Qué es un fichero de texto?

Antes de comenzar a trabajar con ficheros, debemos saber un poco qué es un fichero o archivo de texto. Un fichero de texto va a ser un simple archivo informático que va a contener únicamente texto, sin más detalles. No pensemos en estos ficheros como documentos del Word, LibreOffice o cosas parecidas, pues esos ficheros son específicos de estos programas y contienen texto enriquecido (formatos, imágenes, etc.). Un fichero simple va a tener caracteres sin ningún tipo de formato, que son legibles fácilmente por cualquier persona y que, normalmente, nos lo encontramos con extensión txt, aunque también podemos verlos con otras como inf o dat. Hablaremos básicamente de ficheros de texto aunque, como veremos, también podemos utilizar ficheros binarios.

La utilización de ficheros de texto para estos menesteres se puede asociar un poco a como si fuera una base de datos rudimentaria. Es decir, se utilizaban como almacenamiento de datos con algunas normas internas para su recuperación, como por ejemplo dividir los distintos datos con caracteres como las barras | o las almohadillas # para luego recuperar, línea a línea del fichero, estos datos y dividirlos en las entidades que se necesitan.

Sin embargo, un fichero de texto no tiene todas las funcionalidades que tienen las bases de datos, especialmente en cuanto a relaciones entre los datos, facilidad de acceso y búsqueda de los datos y a la seguridad, pues cualquiera con acceso a ese fichero de texto puede abrirlo y ver los datos almacenados.

Trabajar con ficheros en PHP

PHP incorpora, en su núcleo, todas las funcionalidades para el trabajo con ficheros, por lo que no deberemos preocuparnos de ninguna funcionalidad externa. Gracias a ello, tenemos múltiples funcionalidades para trabajar con ficheros y veremos, en este artículo, cómo abrir y cerrar ficheros fácilmente y las distintas opciones que pueden tener.

Abrir ficheros

Para abrir ficheros en PHP se utiliza la función predefinida fopen que espera, principalmente, el nombre del fichero y el modo de apertura del mismo. Además, podemos indicarle dos parámetros extra para incluir una ruta y el contexto, que luego veremos mejor.

Nombre del fichero o URL

La función fopen también puede abrir una URL como si fuera un fichero (a fin de cuentas, es una sucesión de caracteres), por lo que si le indicamos una URL, PHP intentará abrirla como tal. Si no lo consigue o si considera que no le estamos indicando una URL, intentará abrir el fichero de forma normal.

Se intentará abrir el flujo para ese fichero y, para ello, dicho fichero tiene que ser, obviamente, accesible por PHP. Esto quiere decir que debemos asegurarnos que se tienen los permisos necesarios para su apertura. Por ejemplo, si el estamos trabajando en un servidor local deberíamos asegurarnos de que tenemos permisos de lectura y escritura de sus carpetas. Allí podríamos tener el fichero en la ruta “C:\\xamp\\htdocs\\mi_proyecto\\fichero.txt” en el que hay que asegurarse de escapar las barras invertidas para no tener problemas (por ejemplo “C:\xamp\htdocs\no_funciona” nos daría problemas porque ese \n es el caracteres de salto de línea). Si colocamos barras inclinadas normales (/) no tenemos este problema.

Modo de apertura

En el parámetro para el modo de apertura indicaremos qué tipo de acceso queremos para abrir nuestro fichero. Veamos en la siguiente tabla los modos de apertura disponibles:

ModoDescripción
‘r’Modo sólo para lectura, el cual abre el fichero y apunta al principio del mismo para su lectura
‘r+’Modo para lectura y escritura, apuntando también al principio del fichero y sin borrar previamente nada de lo que ya contiene el fichero
‘w’Modo sólo para escritura, lo cual abrirá el fichero y, si había información, la borrará y lo dejará vacío. Si el fichero no existe previamente, lo intenta crear
‘w+’Modo para lectura y escritura, pero a diferencia del ‘r+’, aquí sí que borra y deja vacío el fichero o lo intenta crear si no existe
‘a’Modo sólo para escritura, sin embargo a diferencia de ‘w’ con este modo apuntamos directamente al final del fichero para añadir nuevos datos sin borrar todo lo anterior. También intenta crear el fichero si no existe
‘a+’Modo para lectura y escritura, con las características del modo anterior, es decir, se colocará al final del fichero o se intenta crear si no existe
‘x’Modo para creación y escritura, es decir, si el fichero ya existiera previamente, este modo dará un error y fallará, por lo que siempre se usa para crear un nuevo fichero
‘x+’Modo para creación, lectura y escritura, de la misma forma que el anterior, es decir, fallará si el archivo ya está creado previamente
‘c’Modo para sólo escritura que, a diferencia de los anteriores, no borra lo que había ya en el fichero, pero se posiciona al principio del fichero y no al final. Igualmente, crea el fichero si no existe
‘c+’Modo para sólo lectura y escritura, con la misma funcionalidad anterior, es decir, colocándose al principio del fichero sin borrar los datos que ya existían y creándolo si no existía
‘e’Modo especial para PHP compilado en ciertos sistemas, por lo que no va a interesarnos ni va a ser muy usado

Modo de apertura binaria

Además de todos los modos vistos anteriormente, podemos añadirle el modo binario colocando una simple b al final del modo de apertura. Con ello, estaremos abriendo el fichero en formato binario. Esto, además, puede ayudar en la codificación de los saltos de línea, pues dependiendo del sistema operativo podemos encontrarnos con que los saltos de línea se representan con \n (basados en Unix, como Linux), con \r\n (Windows) o con \r (Macintosh). Sí, hay que tener en cuenta este aspecto, desgraciadamente, o nos puede llevar a resultados extraños. A veces, abrir el fichero en forma binaria es lo mejor para evitar estos problemas.

Otros parámetros

Los últimos parámetros en la apertura de ficheros son la ruta y el contexto, siendo ambos parámetros opcionales. Con la ruta podemos indicarle una ruta en la cual debe buscar los ficheros. Es útil si tenemos una carpeta fija en la que vamos a ir guardando todos los ficheros para así no escribir esta ruta siempre en el nombre del fichero. El contexto es una acción más compleja y normalmente no vamos a usarla, pero tiene que ver mucho con los flujos del programa y no entraremos en ello.

¿Qué devuelve fopen?

La devolución de esta función es sencilla. Si no ha podido abrir el fichero por cualquier motivo, recibiremos un valor false. Pero si ha podido abrirlo, nos devolverá un recurso de puntero a fichero, es decir, estaremos apuntando al lugar específico del fichero (principio o fin) dependiendo del modo de apertura utilizado.

Ejemplos

Veamos algunos ejemplos simples de cómo utilizar fopen:

<?php
$fichero = fopen('/proyecto/ficheros/fichero.txt', 'w');
$fichero = fopen('/proyecto/ficheros/fichero.txt', 'a+b');
$fichero = fopen('https://programacionbasica.es/', 'r');
?>

Cerrar ficheros

Hay que acordarse de cerrar el fichero. Normalmente tanto por seguridad como por consumo de recursos y, aunque una vez finalizado el programa PHP cerrará los ficheros, debemos hacerlo nosotros. Cerrar un fichero no tiene mucho más secreto ni recorrido que el de acordarnos de utilizar la función fclose para realizar el cierre. Abrir y cerrar ficheros es una acción que siempre debemos tener en memoria cuando trabajemos con ficheros. Obviamente, abrir será sencillo de recordar, pero muchas veces nos olvidamos de cerrar. Veamos un ejemplo sencillo:

<?php
// Apertura
$fichero = fopen('archivo.txt', 'r');

// Cierre
fclose($fichero);
?>

Resumen

Hemos visto cómo utilizar fopen y fclose para abrir y cerrar ficheros, repasando todos los modos de apertura posibles dependiendo de si queremos leer, escribir o también crear ficheros desde cero. Y no debemos olvidarnos de cerrarlos al terminar. Conocidas estas formas, en el próximo artículo comenzaremos a leer los datos contenidos dentro de estos ficheros.

Deja una respuesta