You are on page 1of 4

Usando un archivo de

texto plano como base


de datos: alternativa
ligera a SQL
10 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 mquina; adems 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 edicin
manual, sin utilizar los comandos que prove un intrprete, como PHP por
ejemplo, es tediosa. Para utilizar un conjunto de datos ya generado,
generalmente hay que programar un script que los formatee segn 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. Adems
permite trabajar directamente con un archivo editable por una persona.
Las aplicaciones web que usan este sistema no necesitan instalacin
propiamente dicha, basta con subir unos archivos PHP a nuestro servidor web.
Actualizar el contenido de la pgina es tan fcil 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 cdigo 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 aplicacin web.
Todo ventajas. Vamos a ver cmo podemos ponerlo en prctica.

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 informacin sobre nuestros contactos. Una buena
manera de estructurar los datos podra ser la siguiente:
Nombre contacto 1|email contacto 1|website contacto 1|telfono
contacto 1
Nombre contacto 2|email contacto 2|website contacto 2|telfono
contacto 2
Bsicamente nos tenemos que preocupar de que en cada lnea haya un registro
(un contacto en nuestro ejemplo), que cada columna siempre contenga el
mismo tipo de informacin, y que las celdas estn 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 funcin fopen() de PHP. El
parmetro 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 ledo el archivo desde PHP y extrada la informacin, lo cerramos


con fclose():
1

fclose($fp);

Para que PHP pueda acceder al archivo, tenemos que asegurarnos de que los
permisos del archivo estn correctamente configurados y la ruta que

proporcionamos a la funcin fopen sea correcta. La entrada del manual de


php.net sobre fopen contiene informacin detallada sobre posibles problemas.

Montando el loop y generando la salida HTML


1 $loop = 0; // contador de lneas
2 while (!feof($fp)) { // loop hasta que se llegue al final del archivo
3 $loop++;
4 $line = fgets($fp); // guardamos toda la lnea en $line como un string
5 // dividimos $line en sus celdas, separadas por el caracter |
6 // e incorporamos la lnea 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
15
16

<div>Telfono: '.$field[$loop][3].'</div>
</div>
';

17 $fp++; // necesitamos llevar el puntero del archivo a la siguiente


lnea
18 }

La funcin feof() comprueba si el puntero que recorre el archivo ha


llegado al final de ste.

La funcin fgets() devuelve la lnea completa en la que est situado el


puntero del archivo. Podemos limitar la salida de fgets en bits (1024, 2048)
si las lneas son largas y no las necesitamos completas.
El cdigo 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 lneas

5 while (!feof($fp)) { // loop hasta que se llegue al final del archivo


6 $loop++;
7 $line = fgets($fp); // guardamos toda la lnea en $line como un string
8 // dividimos $line en sus celdas, separadas por el caracter |
9
// e incorporamos la lnea 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>Telfono: '.$field[$loop][3].'</div>
18
</div>
19 ';
20 $fp++; // necesitamos llevar el puntero del archivo a la siguiente
lnea
21
}
22
23
fclose($fp);

Casi todo este manual est basado en el estupendo artculo sobre el tema
publicado en designdetector.
Contexto
Desarrollo web, base de
datos, CSV, fclose, feof, fgets, fopen, MySQL,opendata, PHP, sql
Autor
Alfonso Snchez Uzbal
, aka skotperez
Contenido relacionado

Cmo pasar variables de una pgina a otra en una web con PHP

Script para monitorizar y reiniciar automticamente el servidor de base


de datos mysql en caso de fallo

Cmo ejecutar PHP peridicamente con cron en un servidor Linux

Comparar fechas en PHP. Contenido con caducidad en WordPress

Howto sobre $wpdb: cmo consultar, insertar o modificar la base de


datos a voluntad en WordPress
Compartir

You might also like