XXI. 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.)

Requirimientos

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

By using the --enable-dba=shared configuration option you can build a dynamic loadable module to enable PHP for basic support of dbm-style databases. You also have to add support for at least one of the following handlers by specifying the --with-XXXX configure switch to your PHP configure line.

Aviso

After configuring and compiling PHP you must execute the following test from commandline: php run-tests.php ext/dba. This shows whether your combination of handlers works. Most problematic are dbm and ndbm which conflict with many installations. The reason for this is that on several systems these libraries are part of more than one other library. The configuration test only prevents you from configuring malfaunctioning single handlers but not combinations.

Tabla 2. Supported DBA handlers

HandlerConfigure Switch
dbm To enable support for dbm add --with-dbm[=DIR].

Nota: dbm normally is a wrapper which often results in failures. This means you should only use dbm if you are sure it works and if you really need this format.

ndbm To enable support for ndbm add --with-ndbm[=DIR].

Nota: ndbm normally is a wrapper which often results in failures. This means you should only use ndbm if you are sure it works and if you really need this format.

gdbm To enable support for gdbm add --with-gdbm[=DIR].
db2 To enable support for db2 add --with-db2[=DIR].

Nota: db2 conflicts with db3 and db4.

db3 To enable support for db3 add --with-db3[=DIR].

Nota: db3 conflicts with db2 and db4.

db4 To enable support for db4 add --with-db4[=DIR].

Nota: db4 conflicts with db2 and db3.

Nota: This was added in PHP 4.3.2. In earlier versions of PHP you need to use --with-db3=DIR with DIR being the path to db4 library. It is not possible to use db versions starting from 4.1 with PHP prior to version 4.3.0. Also, the db libraries with versions 4.1 through 4.1.24 cannot be used in any PHP version.

cdb To enable support for cdb add --with-cdb[=DIR].

Nota: Since PHP 4.3.0 you can omit DIR to use the bundled cdb library that adds the cdb_make handler which allows creation of cdb files and allows to access cdb files on the network using PHP's streams.

flatfile To enable support for flatfile add --with-flatfile.

Nota: This was added in PHP 4.3.0 to add compatibility with deprecated dbm extension. Use this handler only when you cannot install one of the libraries required by the other handlers and when you cannot use bundled cdb handler.

inifile To enable support for inifile add --with-inifile.

Nota: This was added in PHP 5.0.0 and allows to read and set microsoft style .ini files (like the php.ini file).

qdbm To enable support for qdbm add --with-qdbm[=DIR].

Nota: qdbm conflicts with dbm and gdbm.

Nota: This was added in PHP 5.0.0. The qdbm library can be loaded from http://qdbm.sourceforge.net.

Nota: Up to PHP 4.3.0 you are able to add both db2 and db3 handler but only one of them can be used internally. That means that you cannot have both file formats. Starting with PHP 5.0.0 there is a configuration check avoid such misconfigurations.

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 -- List all the handlers available
dba_insert -- Insertar entrada
dba_key_split --  Splits a key in string representation into array representation
dba_list -- List all open database files
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

Hosting by: hurra.com
Generated: 2007-01-26 18:01:06