|
|
XVI. DBA
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).
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 | Librairie | Notes |
|---|
| 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().
En utilisant l'option de compilation --enable-dba=shared,
vous pouvez compiler un module dynamique qui activera le support
des bases de données de style DBM pour PHP. Vous devez aussi ajouter le support
d'au moins l'un des gestionnaires suivants, en spécifiant l'option de
configuration --with-XXXX lors de la configuration de
PHP.
| Avertissement |
Après avoir configuré et compilé PHP, vous devez exécuter les test
suivants à partir de la ligne de commande : php run-tests.php
ext/dba. Celà montre si votre combinaison de descripteurs
fonctionne. Les plus problématiques sont dbm et
ndbm qui entrent en conflit avec nombre d'installations.
Ceci est dû au fait que sur de nombreux systèmes, ces librairies font
parties de plus d'une librairie. Le test de configuration vous empêche
juste de configurer des descripteurs dont la combinaison est défectueuse
alors qu'ils fonctionnent correctement séparement.
|
Tableau 2. Gestionnaires DBA supportés | Gestionnaire | Option de configuration |
|---|
| dbm |
Pour activer le support de dbm, ajoutez
--with-dbm[=DIR].
Note :
dbm est une surcouche qui aboutit souvent à des échecs.
Ainsi, vous ne devez utiliser dbm que si vous êtes sûrs qu'il
fonctionne et que vous avez besoin de ce format.
| | ndbm |
Pour activer le support de ndbm, ajoutez
--with-ndbm[=DIR].
Note :
ndbm est une surcouche qui aboutit souvent à des échecs.
Ainsi, vous ne devez utiliser ndbm que si vous êtes sûrs qu'il
fonctionne et que vous avez besoin de ce format.
| | gdbm |
Pour activer le support de gdbm, ajoutez
--with-gdbm[=DIR].
| | db2 |
Pour activer le support de db2, ajoutez
--with-db2[=DIR].
Note :
db2 entre en conflit avec db3 et db4.
| | db3 |
Pour activer le support de db3, ajoutez
--with-db3[=DIR].
Note :
db3 entre en conflit avec db2 et db4.
| | db4 |
Pour activer le support de db4, ajoutez
--with-db4[=DIR].
Note :
db4 entre en conflit avec db2 et db3.
Note :
Ceci a été introduit avec PHP 4.3.2. Dans des versions précédentes
de PHP, vous devez utiliser --with-db3=DIR où DIR pointe vers le
répertoire ou se situe la librairie db4. Il n'est pas possible
d'utiliser des versions de db supérieures à 4.1 avec des versions de
PHP antérieures à 4.3.0. De même, les librairies db avec des
versions allant de 4.1 à 4.1.24 ne peuvent être utilisées avec aucune
version de PHP.
| | 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 ajoute un
gestionnaire cdb_make, permet la création de fichier
cdb et permet l'accès aux fichiers cbd via le réseau avec les
flux de PHP.
| | flatfile |
Pour activer le support des fichiers, ajoutez
--with-flatfile.
Note :
Ceci a été ajouté à PHP 4.3.0 pour assurer la compatibilité avec l'extension
dbm qui est obsolète.
Utilisez ce gestionnaire seulement quand vous ne pouvez installer
aucun autre gestionnaire et que vous ne pouvez pas utiliser le
gestionnaire cdb intégré.
| | inifile |
Pour activer le support de inifile, ajoutez l'option
de compilation --with-inifile.
Note :
Cette option a été ajoutée avec 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.
| | qdbm |
Pour activer le support de qdbm, ajoutez l'option de compilation
--with-qdbm[=DIR].
Note :
qdbm entre en conflit avec dbm et gdbm.
|
Note :
Jusqu'en PHP 4.3.0, il était possible d'utiliser simultanément les
gestionnaires db2 et db3 mais juste avec un seul en interne. Celà
signifie que vous ne pouvez pas avoir les deux formats de fichiers. Depuis
PHP 5.0.0, une vérification est faite lors de la configuration pour éviter ces
problèmes.
Cette extension ne définit aucune directive de
configuration.
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.
Cette extension ne définit aucune constante.
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
- dba_delete -- Efface une ligne dans une base DBA
- dba_exists -- Vérifie qu'une clé DBA existe
- dba_fetch -- Lit les données liées à une clé DBA
- dba_firstkey -- Lit la première clé DBA
- dba_handlers -- Liste les gestionnaires DBA disponibles
- dba_insert -- Insère une entrée DBA
- dba_key_split --
Transforme une représentation de clef DBA par chaîne en une
représentation par tableau
- dba_list -- Liste tous les fichiers de bases de données DBA ouverts
- dba_nextkey -- Lit la clé DBA suivante
- dba_open -- Ouvre une base de données DBA
- dba_optimize -- Optimise une base DBA
- dba_popen -- Ouvre une connexion persistante à une base de données DBA
- dba_replace -- Remplace ou insère une ligne DBA
- dba_sync -- Synchronise une base de données DBA
|