XVI. DBA

Introduction

Ces fonctions constituent l'interface avec les bases de type Berkeley.

C'est une couche générale pour plusieurs bases de données sur fichiers. En tant que telles, les fonctionnalités sont limitées à une partie des fonctionnalités des bases de données modernes, comme Sleepycat Software's DB2 (à ne pas confondre avec IBM's DB2 software, qui fonctionne avec ODBC).

Pré-requis

Le comportement de certaines fonctions dépend de la base de données utilisée. Par exemple dba_optimize() et dba_sync() n'auront pas le même effet d'une base à l'autre.

Lors de l'utilisation de la fonction dba_open() ou de dba_popen(), une des librairies suivantes doit être fournie comme argument. La liste complète des librairies supportées par votre configuration est disponible avec la fonction phpinfo(). (Pour inclure le support de l'une de ces librairies, ajoutez l'option de configuration --with-XXXX.)

Tableau 1. Liste des librairies DBA

LibrairieNotes
dbm Dbm est la plus ancienne des base de données de type Berkeley. Il vaut mieux l'éviter, si possible. Les fonctions de compatibilités codées dans DB2 et gdbm ne sont pas supportées, car elles ne sont compatibles qu'au niveau du code source et ne peuvent pas gérer le format dbm originel.
inifile Ceci est disponible depuis PHP 4.3.3 pour pouvoir modifier les fichiers php.ini depuis les scripts PHP. Lorsque vous travaillez avec des fichiers ini, vous pouvez passer des tableaux de la forme array(0 => groupe, 1=>nom_valeur) ou des chaînes de la forme "[groupe]nom_valeur" où groupe est optionnel. Comme les fonctions dba_firstkey() et dba_nextkey() retournent des représentations de la clef au format chaîne, il existe une nouvelle fonction, dba_key_split(), disponible depuis PHP 5 qui permet de convertir la chaîne de caractères de clefs en tableau de clefs sans perdre FALSE.
ndbm ndbm est un nouveau type de dbm plus flexible. Il a cependant la majorité des limitations du genre. (il est donc déconseillé)
gdbm gdbm est la base dbm GNU.
db2 db2 est DB2 de Sleepycat Software. Elle se décrit comme un "ensemble d'outils qui fournissent une base de données performante, tant pour les applications indépendantes que pour le client/serveur".
db3 DB3 est le DB3 de Sleepycat Software.
cdb cdb est "un package rapide, robuste, léger pour créer et lire des bases de données constantes". C'est l'auteur de qmail qui l'a écrit, et elle est disponible ici. Puisque c'est une base constante, elle ne supporte que la lecture. Mais depuis PHP 4.3.0, le support de l'écriture a été ajouté (mais pas celui de la modification), grâce aux librairies internes de cdb.
cdb_make Depuis PHP 4.3.0, la création de fichier cdb est supportée, lorsque la librairie cdb, distribuée avec PHP est utilisée.
flatfile Depuis PHP 4.3.0, et pour assurer la compatibilité avec le gestionnaire dbm qui est obsolète et doit être évité, PHP supporte aussi un gestionnaire de fichiers. Il est recommandé de l'utiliser lorsque vous devez accéder à des fichiers au format dbm. Cela arrive lorsque vous ne pouvez pas trouver les librairies dbm pour compiler PHP avec.

Lors de l'utilisation de la fonction dba_open() ou de dba_popen(), une des librairies suivantes doit être fournie comme argument. La liste complète des librairies supportées par votre configuration est disponible avec la fonction phpinfo().

Installation

En utilisant l'option de compilation --enable-dba=shared, vous pouvez compiler un module dynamique qui activera le support des bases de données DBM pourPHP. Vous devez aussi ajouter le support de l'un des gestionnaires suivants, en spécifiant l'option de configuration --with-XXXX.

Tableau 2. Gestionnaires DBA

HandlerConfigure Switch
dbm Pour activer le support de dbm, ajoutez --with-dbm[=DIR].
ndbm Pour activer le support de ndbm, ajoutez --with-ndbm[=DIR].
gdbm Pour activer le support de gdbm, ajoutez --with-gdbm[=DIR].
db2 Pour activer le support de db2, ajoutez --with-db2[=DIR].
db3 Pour activer le support de db3, ajoutez --with-db3[=DIR].
cdb Pour activer le support de cdb, ajoutez --with-cdb[=DIR].

Note : Depuis PHP 4.3.0, vous pouvez omettre d'utiliser DIR, afin d'exploiter la librairie cdb fournie avec PHP, qui ajouter un gestionnaire cdb_make, qui permet la création de fichier cdb, et l'accès aux fichiers cbd via le réaseau avec les flôts de PHP.

flatfile Pour activer le support des fichiers, ajoutez --with-flatfile.

Note : Depuis PHP 4.3.0, et pour assurer la compatibilité avec le gestionnaire dbm qui est obsolète et doit être évité, PHP supporte aussi un gestionnaire de fichiers. Il est recommandé de l'utiliser lorsque vous devez accéder à des fichiers au format dbm. Cela arrive lorsque vous ne pouvez pas trouver les librairies dbm pour compiler PHP avec.

inifile Pour activer le support de inifile, ajoutez l'option de compilation --with-inifile.

Note : Cette option a été ajoutée en PHP 5.0.0 et permet de lire et écrire dans des fichiers d'initialisation de type microsoft (.ini), comme le php.ini par exemple).

Note : Jusqu'en PHP 4.3.0, il était possible d'utiliser simultanmément les gestionnaires db2 et db3 mais n'en n'utiliser qu'un seul en interne. Cela signifie que vous ne pouvez pas avoir les deux formats de fichiers. Depuis PHP 5.0.0, il existe une option de configuration pour éviter ces problèmes.

Configuration à l'exécution

Cette extension ne définit aucune directive de configuration.

Types de ressources

Les fonctions dba_open() et dba_popen() retourne une ressource qui représente la base de données ouverte, et qui est utilisées par toutes les autres fonctions dba.

Constantes prédefinies

Cette extension ne définit aucune constante.

Exemples

Exemple 1. Exemple DBA (1)

<?php

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

if (!
$id) {
    echo
"dba_open a échoué\n";
    exit;
}

dba_replace ("cle", "Ceci est un exemple!", $id);

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

dba_close ($id);
?>

DBA gère les données binaires et n'a pas de limites arbitraires. Elle hérite de toutes les limites de la base sous-jacente.

Toutes les bases de données sur fichiers doivent fournir un moyen de changer le mode d'accès au fichier d'une base et, si possible, de toutes les bases. Le mode d'accès est généralement passé en quatrième argument à dba_open() ou dba_popen().

Vous pouvez accéder à toutes les entrées d'une base d'une manière linéaire, avec les fonctions dba_firstkey() et dba_nextkey(). Vous ne devez pas modifier une base lorsque vous la traversez ainsi.

Exemple 2. Passer en revue une base

<?php

// ...ouverture de la base...

$key = dba_firstkey ($id);

while (
$key != false) {
    if (...) {          
    
// conserver la clé pour faire d'autres opérations plus tard
        
$handle_later[] = $key;
    }
    
$key = dba_nextkey ($id);
}

for (
$i = 0; $i < count($handle_later); $i++)
    
dba_delete ($handle_later[$i], $id);

?>

Table des matières
dba_close -- Ferme une base
dba_delete -- Efface une entrée
dba_exists -- Vérifie qu'une clé existe
dba_fetch -- Lit les données liées à une clé
dba_firstkey -- Lit la première clé
dba_handlers -- Liste les gestionnaires disponibles
dba_insert -- Insère une entrée
dba_key_split -- Transforme une représentation de clef par chaîne en une représentation par tableau
dba_list -- Liste tous les fichiers de base de données ouverts
dba_nextkey -- Lit la clé suivante
dba_open -- Ouvre une base de données
dba_optimize -- Optimise une base
dba_popen -- Ouvre une connexion persistante à une base de données dba
dba_replace -- Remplace ou insère une entrée
dba_sync -- Synchronise une base de données