usando un archivo de texto plano como base de datos
DESCRIPTION
Archivos de textoTRANSCRIPT
Usando un archivo de texto plano como base de datos: alternativa ligera a SQL10 de mayo de 2013
Hay aplicaciones web para las que una base de datos SQL se le queda
grande. Una base de datos SQL necesita un servidor de base de datos que
consume no pocos recursos en nuestra máquina; además la base de datos
necesita ser creada, junto a los usuarios y sus permisos, hace falta configurar
correctamente codificaciones, crear las diferentes tablas…
Por otro lado, aunque los archivos SQL son archivos de texto plano, su edición
manual, sin utilizar los comandos que proveé un intérprete, como PHP por
ejemplo, es tediosa. Para utilizar un conjunto de datos ya generado,
generalmente hay que programar un script que los formatee según la sintaxis
SQL para poder insertarlos en la base de datos.
¿Por qué no utilizar un archivo de texto plano como base de datos?Esto
nos ahorra todo el trabajo relacionado con el servidor de base de datos.
Además permite trabajar directamente con un archivo editable por una
persona.
Las aplicaciones web que usan este sistema no necesitan instalación
propiamente dicha, basta con subir unos archivos PHP a nuestro servidor web.
Actualizar el contenido de la página es tan fácil como editar un archivo de texto
y subirlo.
Como con una base de datos SQL, seguimos disfrutando de las ventajas de
tener los datos y el código separados. Casi todas las aplicaciones para manejar
datos permiten exportar a un archivo de texto plano, tipo CSV, lo cual evita
tener que programar un conversor para incorporar datos de manera masiva a
nuestra aplicación web.
Todo ventajas. Vamos a ver cómo podemos ponerlo en práctica.
PHP incluye un conjunto de comandos para comunicarse con un archivo de
texto: abrirlo, leerlo y escribir en él. A grandes rasgos todo lo que tenemos que
hacer es:
Seguir un orden a la hora de guardar los datos en el archivo de texto, generar
una estructura que PHP pueda interpretar.
Acceder a los datos del archivo desde PHP y ordenarlos en una matriz para
poder usarlos.
Recorrer la matriz con un loop para generar la salida HTML.
La base de datos: el archivo de texto plano
Como ejemplo vamos a pensar en un archivo llamado contactos.txtque, a
modo de agenda, contiene información sobre nuestros contactos. Una buena
manera de estructurar los datos podría ser la siguiente:
Nombre contacto 1|email contacto 1|website contacto 1|teléfono
contacto 1
Nombre contacto 2|email contacto 2|website contacto 2|teléfono
contacto 2
Básicamente nos tenemos que preocupar de que en cada línea haya un registro
(un contacto en nuestro ejemplo), que cada columna siempre contenga el
mismo tipo de información, y que las celdas estén separadas siempre por el
mismo caracter, a ser posible que no vayamos a usar en su contenido.
Accediendo a los datos del archivo con PHP
Para acceder al archivo usamos la función fopen() de PHP. El
parámetro r indica que estamos abriendo el archivo solo para leer su contenido
y coloca el puntero que lo irá recorriendo al principio.
1 $fp = fopen('contactos.txt','r');
2 if (!$fp) {echo 'ERROR: No ha sido posible abrir el archivo. Revisa su nombre y sus permisos.'; exit;}
Una vez leído el archivo desde PHP y extraída la información, lo cerramos
con fclose():
1 fclose($fp);
Para que PHP pueda acceder al archivo, tenemos que asegurarnos de que los
permisos del archivo estén correctamente configurados y la ruta que
proporcionamos a la función fopen sea correcta. La entrada del manual de
php.net sobre fopen contiene información detallada sobre posibles problemas.
Montando el loop y generando la salida HTML
1 $loop = 0; // contador de líneas
2 while (!feof($fp)) { // loop hasta que se llegue al final del archivo
3 $loop++;
4 $line = fgets($fp); // guardamos toda la línea en $line como un string5 // dividimos $line en sus celdas, separadas por el caracter |
6 // e incorporamos la línea a la matriz $field
7 $field[$loop] = explode ('|', $line);
8 // generamos la salida HTML
9 echo '
10 <div>
11 <div>Nombre: '.$field[$loop][0].'</div>
12 <div>Email: '.$field[$loop][1].'</div>
13 <div>Website: '.$field[$loop][2].'</div>
14 <div>Teléfono: '.$field[$loop][3].'</div>15 </div>
16 ';
17 $fp++; // necesitamos llevar el puntero del archivo a la siguiente línea
18 }
La función feof() comprueba si el puntero que recorre el archivo ha llegado
al final de éste.
La función fgets() devuelve la línea completa en la que esté situado el
puntero del archivo. Podemos limitar la salida de fgets en bits (1024, 2048…)
si las líneas son largas y no las necesitamos completas.
El código completo:
1 $fp = fopen('contactos.txt','r');
2 if (!$fp) {echo 'ERROR: No ha sido posible abrir el archivo. Revisa su nombre y sus permisos.'; exit;}
3
4 $loop = 0; // contador de líneas5 while (!feof($fp)) { // loop hasta que se llegue al final del archivo
6 $loop++;
7 $line = fgets($fp); // guardamos toda la línea en $line como un string
8 // dividimos $line en sus celdas, separadas por el caracter |
9 // e incorporamos la línea a la matriz $field
10 $field[$loop] = explode ('|', $line);
11 // generamos la salida HTML
12 echo '
13 <div>
14 <div>Nombre: '.$field[$loop][0].'</div>
15 <div>Email: '.$field[$loop][1].'</div>
16 <div>Website: '.$field[$loop][2].'</div>17 <div>Teléfono: '.$field[$loop][3].'</div>
18 </div>
19 ';
20 $fp++; // necesitamos llevar el puntero del archivo a la siguiente línea
21 }
22
23 fclose($fp);
Casi todo este manual está basado en el estupendo artículo sobre el tema
publicado en designdetector.
Contexto
Desarrollo web, base de
datos, CSV, fclose, feof, fgets, fopen, MySQL,opendata, PHP, sql
Autor
Alfonso Sánchez Uzábal
, aka skotperez
Contenido relacionado
Cómo pasar variables de una página a otra en una web con PHP
Script para monitorizar y reiniciar automáticamente el servidor de base de
datos mysql en caso de fallo
Cómo ejecutar PHP periódicamente con cron en un servidor Linux
Comparar fechas en PHP. Contenido con caducidad en WordPress
Howto sobre $wpdb: cómo consultar, insertar o modificar la base de datos a
voluntad en WordPress
Compartir