Funciones de la Capa de Abstracci贸n de Bases de Datos (tipo-dbm)

XXIV. Funciones de la Capa de Abstracci贸n de Bases de Datos (tipo-dbm)

Introducci贸n

Estas funciones forman la base para acceder a bases de datos tipo Berkeley DB.

Esta es una capa general de abstracci贸n para varias bases de datos basadas en archivos. Como tal, su funcionalidad est谩 limitada al sub-conjunto com煤n de caracter铆sticas que soportan bases de datos modernas como DB2 de Sleepycat Software. (No confundirla con el software DB2 de IBM, el cual es soportado por medio de las funciones ODBC.)

Requisitos

El comportamiento de varios aspectos depende de la implementaci贸n de la base de datos interna. Funciones como dba_optimize() y dba_sync() har谩n lo que prometen para una base de datos y no tendr谩n efecto sobre otras. Es necesario descargar e instalar los gestores de base de datos soportados.

Tabla 1. Lista de gestores de DBA

GestorNotas
dbm Dbm es el tipo m谩s antiguo (original) de bases de datos tipo Berkeley DB. Es recomendable evitarlo, en lo posible. No soportamos las funciones de compatibilidad incorporadas en DB2 y gdbm, ya que solo son compatibles en el nivel de c贸digo fuente, pero no pueden gestionar el formato dbm original.
ndbm Ndbm es un tipo m谩s reciente y flexible que dbm. Aun tiene muchos de los l铆mites arbitrarios de dbm (y por lo tanto es obsoleto).
gdbm Gdbm es el administrador de bases de datos GNU.
db2 DB2 es el formato DB2 de Sleepycat Software. Es descrito como "un grupo de herramientas program谩ticas que ofrecen soporte incorporado y de alto rendimiento de bases de datos tanto para aplicaciones independientes como cliente/servidor".
db3 DB3 es DB3 de Sleepycat Software.
db4 DB4 es DB4 de Sleepycat Software. Este se encuentra disponible desde PHP 4.3.2.
cdb Cdb es "un paquete r谩pido, confiable y ligero para crear y leer bases de datos constantes." Es del creador de qmail y puede encontrarse en http://cr.yp.to/cdb.html. Ya que es constante, s贸lo soportamos las operaciones de lectura. Y desde PHP 4.3.0 soportamos escritura (no actualizaci贸n) a trav茅s de la biblioteca cdb interna.
cdb_make A partir de PHP 4.3.0 soportamos la creaci贸n (no actualizaci贸n) de archivos cdb cuando la biblioteca cdb incorporada es usada.
flatfile Este formato est谩 disponible desde PHP 4.3.0 煤nicamente para efectos de compatibilidad con la extensi贸n obsoleta dbm y deber铆a evitarse. Sin embargo es posible usarlo cuando los archivos fueron creados en este formato. Eso ocurre cuando 'configure' no encuentra alguna biblioteca externa.
inifile Este se encuentra disponible desde PHP 4.3.3 y tiene la capacidad de modificar archivos php.ini desde scripts PHP. Cuando se trabaja con archivos ini es posible pasar matrices de la forma array(0=>grupo,1=>nombre_valor) o cadenas de la forma "[grupo]nombre_valor" en donde el grupo es opcional. Dado que las funciones dba_firstkey() y dba_nextkey() devuelven representaciones tipo cadena de la clave, existe una nueva funci贸n, dba_key_split(), disponible desde PHP 5 que permite convertir las claves tipo cadena en claves tipo matriz sin perder FALSE.
qdbm Este se encuentra disponible desde PHP 5.0.0. La biblioteca qdbm puede encontrarse en http://qdbm.sourceforge.net.

Cuando se invocan las funciones dba_open() o dba_popen(), uno de los nombres de gestor debe entregarse como argumento. La lista de gestores realmente disponibles se muestra al invocarse phpinfo() o dba_handlers().

Instalaci贸n

Usando el conmutador de configuraci贸n --enable-dba=shared, es posible construir un m贸dule susceptible a ser cargado din谩micamente para habilitar PHP con soporte b谩sico de bases de datos tipo dbm. Tambi茅n es necesario a帽adir soporte para al menos uno de los siguientes gestores especificando el valor de configuraci贸n --with-XXXX en su l铆nea 'configure' de PHP.

Aviso

Despu茅s de configurar y compilar PHP es necesario ejecutar la siguiente prueba desde la l铆nea de comandos: php run-tests.php ext/dba. 脡sta muestra si su combinaci贸n de gestores funciona. Los m谩s problem谩ticos son dbm y ndbm, que ocasionan conflictos con varias instalaciones. La raz贸n de esto es que en muchos sistemas aquellas bibliotecas son parte de m谩s de una biblioteca externa. La prueba de configuraci贸n solo le previene de configurar gestores sencillos que operen incorrectamente, pero no de las combinaciones.

Tabla 2. Gestores DBA soportados

GestorConmutador de Configuraci贸n
dbm Para habilitar el soporte dbm agregue --with-dbm[=DIR].

Nota: dbm es usualmente una envoltura que con frecuencia resulta en fallos. Esto quiere decir que 煤nicamente deber铆a usar dbm si est谩 seguro de que funciona y realmente necesita este formato.

ndbm Para habilitar soporte para ndbm agregue --with-ndbm[=DIR].

Nota: ndbm es usualmente una envoltura que con frecuencia resulta en fallos. Esto quiere decir que 煤nicamente deber铆a usar ndbm si est谩 seguro de que funciona y realmente necesita este formato.

gdbm Para habilitar el soporte para gdbm agregue --with-gdbm[=DIR].
db2 Para habilitar el soporte para db2 agregue --with-db2[=DIR].

Nota: db2 genera un conflicto con db3 y db4.

db3 Para habilitar el soporte para db3 agregue --with-db3[=DIR].

Nota: db3 genera un conflicto con db2 y db4.

db4 Para habilitar el soporte para db4 agregue --with-db4[=DIR].

Nota: db4 genera un conflicto con db2 y db3.

Nota: Esta opci贸n fue agregada en PHP 4.3.2. En versiones anteriores de PHP, es necesario usar --with-db3=DIR, en donde DIR es la ruta hacia la biblioteca db4. No es posible usar versiones de db desde 4.1 con versiones de PHP anteriores a 4.3.0. Asimismo, las bibliotecas db con versiones entre 4.1 a 4.1.24 no pueden ser usadas en ninguna versi贸n de PHP.

cdb Para habilitar el soporte para cdb agregue --with-cdb[=DIR].

Nota: Desde PHP 4.3.0 es posible omitir DIR para usar la biblioceta cdb incorporada, acci贸n que agrega el gestor cdb_make para permitir la creaci贸n de archivos cdb y permite el acceso a archivos cdb en la red usando secuencias de PHP.

flatfile Para habilitar el soporte para archivos planos (flatfile) agregue --with-flatfile.

Nota: Este gestor fue agregado en PHP 4.3.0 para ofrecer compatibilidad con la extensi贸n obsoleta dbm. Use este gestor 煤nicamente cuando no pueda instalar una de las bibliotecas requeridas por los otros gestores y no pueda usar el gestor cdb incorporado.

inifile Para habilitar el soporte para inifile agregue --with-inifile.

Nota: Este gestor fue agregado en PHP 5.0.0 y le permite leer y definir archivos tipo .ini de microsoft (como el archivo php.ini).

qdbm Para habilitar el soporte para qdbm agregue --with-qdbm[=DIR].

Nota: qdbm genera un conflicto con dbm y gdbm.

Nota: Este gestor fue agregado en PHP 5.0.0. La biblioteca qdbm puede obtenerse desde http://qdbm.sourceforge.net.

Nota: Hasta PHP 4.3.0 es posible agregar tanto db2 como db3 pero solo uno de ellos puede ser usado internamente. Esto quiere decir que no es posible tener ambos formatos de archivo. A partir de PHP 5.0.0 existe un chequeo de configuraci贸n para evitar tales errores de configuraci贸n.

Configuraci贸n en tiempo de ejecuci贸n

Esta extensi贸n no tiene directivas de configuraci贸n en php.ini.

Tipos de recursos

Las funciones dba_open() y dba_popen() devuelven un gestor al archivo de base de datos a acceder especificado, el cual es usado por todas las otras llamadas a funciones dba.

Constantes predefinidas

Esta extensi贸n no tiene ninguna constante definida.

Ejemplos

Ejemplo 1. Ejemplo de DBA

<?php

$id
= dba_open("/tmp/prueba.db", "n", "db2");

if (!
$id) {
    echo
"dba_open ha fallado\n";
    exit;
}

dba_replace("clave", "Este es un ejemplo!", $id);

if (
dba_exists("clave", $id)) {
    echo
dba_fetch("clave", $id);
    
dba_delete("clave", $id);
}

dba_close($id);
?>

DBA es seguro con material binario y no tiene l铆mites arbitrarios. Sin embargo, hereda todos los l铆mites establecidos por la implementaci贸n de la base de datos interna.

Todas las bases de datos basadas en archivo deben ofrecer una forma de establecer el modo de archivo de una base de datos reci茅n creada, si es posible. Un modo de archivo es pasado por lo general como el cuarto argumento a dba_open() o dba_popen().

Es posible acceder a todas las entradas de una base de datos en una forma lineal usando las funciones dba_firstkey() y dba_nextkey(). No debe modificar la base de datos mientras la recorre.

Ejemplo 2. Recorrido de una base de datos

<?php

// ...abrir base de datos...

$clave = dba_firstkey($id);

while (
$clave != false) {
    if (
true) {   // recordar la clave para realizar alguna accion mas adelante
        
$manejar_despues[] = $clave;
    }
    
$clave = dba_nextkey($id);
}

foreach (
$manejar_despues as $val) {
    
dba_delete($val, $id);
}

?>

Tabla de contenidos
dba_close -- Cerrar una base de datos DBA
dba_delete -- Elimina una entrada DBA especificada por clave
dba_exists -- Verificar si la clave existe
dba_fetch -- Recuperar datos especificados por clave
dba_firstkey -- Recuperar la primera clave
dba_handlers -- Listar todos los gestores disponibles
dba_insert -- Insertar entrada
dba_key_split --  Separa una clave en representaci贸n de cadena en representaci贸n de matriz
dba_list -- Listar todos los archivos de base de datos abiertos
dba_nextkey -- Recuperar la siguiente clave
dba_open -- Abrir una base de datos
dba_optimize -- Optimizar base de datos
dba_popen -- Abrir una base de datos de forma persistente
dba_replace -- Reemplazar o insertar una entrada
dba_sync -- Sincronizar base de datos