Explicamos las funciones básicas para la gestión de archivos con PHP, para el acceso al sistema de archivos y la lectura y escritura de ficheros de texto.
El tratamiento de archivos resulta ser una práctica muy común en cualquier programa informático. Por supuesto, la web no resulta una excepción y muy a menudo nos vemos en la necesidad de procesar un texto para cambiarle el formato, buscar una cadena en su interior o cualquier otro tipo de operación.
PHP propone un sinfín de funciones para la gestión de archivos que van desde las más elementales de apertura, lectura y cierre a otras más rebuscadas como el cálculo de espacio en el disco duro, tamaño del archivo, gestión de derechos de acceso...
En este artículo pretendemos mostraros cuáles son las funciones más esenciales para el tratamiento de archivos para posteriormente ver diversos ejemplos que os pueden resultar útiles:
Funciones de gestión de archivos
Veamos una lista de funciónes junto con su breve descripción y una muestra de la sintaxis usada para invocarlas.
Por supuesto, todas las funciones de acceso al sistema de archivos que ofrece PHP nos permiten acceder a las carpetas y ficheros alojados en el servidor web donde está la página. Además, muchas de las funciones permiten abrir URLs de páginas alojadas en otros sitios web, aunque en ese caso solamente se permitirá la lectura del contenido y no la escritura pues no tendremos permiso. Si nuestro objetivo es acceder al sistema de archivos del ordenador del usuario, PHP no es la solución. Javascript y el navegador habilitan otro tipo de API de la que no hablaremos en este manual pero que puedes encontrar información en DesarrolloWeb.
Función copy: Copia un archivo
copy($origen, $destino)
Función rename: Cambia el nombre del archivo de $antes a $despues
rename($antes, $despues)
Función unlink: Borra el archivo
unlink($archivo)
Funciones para la lectura de archivos
Ahora vamos a ver funciones para la lectura de archivos de texto.
Función fopen: Abre un archivo y le asigna un identificador id. Veremos el modo más adelante
$id = Fopen($archivo, $modo)
Función fgets: Lee una línea de un archivo hasta un numero máximo de caracteres
fgets($id, $max)
Función fwrite: Escribe una cadena dentro del archivo
fwrite($id, $cadena)
Función fseek: Avanza o retrocede el puntero del archivo un cierto numero de posiciones
fseek($id, $posiciones)
Función feof: Comprueba si el puntero que lee el archivo ha llegado al final
feof($id)
Función fpassthru: lee completamente el archivo y lo muestra
fpassthru($id)
Función fclose: Cierra el archivo abierto previamente
fclose($id)
Las operaciones más elementales, copia, borrado y cambiar el nombre, requieren únicamente el nombre y ruta (path) del archivo sobre el cual se ejerce la operación. Para operaciones más complejas, como la lectura de líneas o la escritura de texto dentro del archivo, se requiere de una previa apertura del archivo al cual le asignaremos un indentificador $id. Por supuesto, vermos ejemplos más detallados en este manual, sin ir más lejos en el siguiente capítulo dedicado a la lectura secuencial de un archivo de texto.
Una vez abierto el archivo, podremos desplazarnos a lo largo de él por medio de un puntero imaginario que avanza o retrocede por las líneas de texto y mediante el cual nos situaremos en el lugar escogido para insertar, modificar o simplemente copiar una cadena.
Modos de apertura de archivos
Existen distintos modos de apertura de ficheros que nos permiten definir las acciones que podemos realizar sobre el archivo. Aquí os mostramos los diferentes modos, junto con su sintaxis y descripción. Veréis que son de lo más variado.
- 'r': Sólo lectura
- 'r+': Lectura y escritura
- 'w': Sólo escritura
- 'w+': Lectura y escritura. Suprime el contenido anterior si se escribe. El archivo es creado si no existe.
- 'a': Sólo escritura. El archivo es creado si no existe y el puntero se coloca al final.
- 'a+': Lectura y escritura. El archivo es creado si no existe y el puntero se coloca al final.
Si tratamos con archivos en binario hemos de colocar una b delante del modo (ej. ba, bw+,...)
Ejemplo de uso de la función fopen para la apertura de un fichero
Para acabar este artículo vamos a mostrar un ejemplo sencillo de uso de la función fopen() que permite abrir un fichero, para lectura y otros modos como escritura.
Nuestro ejemplo será bastante sencillo, pero demostrará que además de ficheros del sistema de archivos del servidor también podemos abrir para lectura URLs que están en otros servidores. En este caso no vamos a hacer nada con el fichero abierto, sino simplemente verificar la existencia de esa URL.
El ejemplo es el siguiente:
<?php
$url = 'https://guiarte.com/valencia';
if(@fopen($url, "r")) {
echo 'La URL existe';
} else {
echo 'Esa URL no existe';
}
- Al principio definimos la URL a la que queremos conectar
- Luego usamos fopen() en modo de lectura (r)
- La "@" antes de fopen() la hemos colocado para evitar que nos aparezca un "warning" si la ruta no existe. En ese caso PHP emitiría un mensaje en la página que no queremos que aparezca, aunque a decir verdad ese mensaje no aparecería en el servidor donde publiquemos el script, ya que los servidores generalmente tienen desactivada la presentación de errores en la página. En todo caso, gracias a la "@" al principio de la llamada de una función se evitarán los mensajes de advertencia y el código continuará como si nada. Puedes probar a quitarla para ver qué pasa.
- Si fopen() devuelve true es que se pudo abrir el fichero, false en caso contrario
Así de simple es la verificación. De todos modos, tenemos otro artículo que profundiza más en esta práctica. Te dejamos el enlace: Verificar la existencia de una URL.
Conclusión a la introducción a la gestión de ficheros con PHP
Recordamos que esta lista no es más que una recopilacion y que muchas otras funciones relacionadas pueden sernos también útiles. Para ello os recomendamos seguir la lectura del Manual Gestión de archivos en PHP y por supuesto leer la documentación de PHP del sistema de ficheros.
Rubén Alvarez
Rubén es doctor en química y programador principalmente en sus ratos libres con...