これらの関数は、Berkeley DB 型データベースへのアクセス用の基本関数を
構成します。
これらの関数は、複数のファイルベースのデータベース用のアブストラクション
・レイヤーです。その機能は、Sleepycat
Software's DB2サポートのような近代的なデータベースの機能の
サブセットに制限されています。(IBMのソフトウエアDB2と混同しないで
下さい。このデータベースは、ODBC 関数
を通じてサポートされます。)
各機能の動作は、使用するデータベースの実装に依存します。
dba_optimize() および dba_sync() の
ような関数は、特定のデータベースでは動作しますが、他のデータベース
では機能しません。サポートされるdbaハンドラをダウンロードし、イン
ストールする必要があります。
表 1. DBAハンドラのリスト
| ハンドラ | 注意 |
|---|
| dbm |
dbm は最も古い(元祖の)Berkeley DB 型データベースです。可能なら
ば使用しない方が良いでしょう。DB2およびgdbmに組み込まれている互
換性を保つための関数は、サポートされません。これは、実装されて
いるのがソースレベルの互換性のみであり、元のdbmフォーマットを処
理することができないためです。
|
| ndbm |
ndbm は、より新型であり、dbmよりも柔軟です。
dbm固有の制約の多くをまだ有しています。(そのため、古い実装です。)
|
| gdbm |
gdbmは、GNUデータベースマネージャ
です。
|
| db2 |
DB2 は、Sleepycat Software's DB2
です。これは、「スタンドアローンおよびクライアント/サーバー
アプリケーションの両方で高性能な組込みデータベースサポートを提供する
プログラム用ツールキット」として記述されています。
|
| db3 |
DB3 は、Sleepycat Softwareの
DB3です。
|
| db4 |
DB4 は、Sleepycat Software's
DB4です。これは、PHP 4.4.0以降で利用可能です。
|
| cdb |
cdbは、固定データベースの作成・読込み用の高速で高信頼性の軽量型
パッケージです。これは、qmailの作者によるものであり、ここにあります。固定であるため、読込
み操作のみがサポートされます。
PHP 4.3.0以降、内部的なcdbライブラリにより(更新ではなく)書き
込みがサポートされています。
|
| cdb_make |
PHP 4.3.0以降、付属するcdbライブラリを使用する場合にcdbファ
イルの(更新ではなく)作成をサポートします。
|
| flatfile |
これは、PHP 4.3.0以降で利用可能で、古い
dbm 拡張モジュールとの互換性
のためのものであり、使用するべきではありません。
しかし、ファイルがこの形式で作成された場所でこれを使用するこ
とができます。これは、configureが外部ライブラリを見付けるこ
とができない場合に生じます。
|
dba_open()またはdba_popen()
関数を実行する際、引数にハンドラ名の一つを指定する必要があります。
実際に利用可能なハンドラのリストは、
phpinfo() または
dba_handlers()をコールした際に表示されます。
設定オプション--enable-dba=shared
を使用することにより、dbm形式のデータベースをサポートする動的にロー
ド可能なモジュールを有効にしてPHPを構築することができます。
また、PHPのconfigure行に設定スイッチ --with-XXXX
を指定することにより、少なくとも以下のハンドラの一つのサポートを追加
する必要があります。
表 2. サポートされるDBAハンドラ
| ハンドラ | configureのスイッチ |
|---|
| dbm |
dbmのサポートを有効にするには、
--with-dbm[=DIR]を追加します。
|
| ndbm |
ndbmのサポートを有効にするには、
--with-ndbm[=DIR]を追加します。
|
| gdbm |
gdbmのサポートを有効にするには、
--with-gdbm[=DIR]を追加します。
|
| db2 |
db2のサポートを有効にするには、
--with-db2[=DIR]を追加します。
注意:
db2はdb3およびdb4とコンフリクトします。
|
| db3 |
db3のサポートを有効にするには、
--with-db3[=DIR]を追加します。
注意:
db3はdb2およびdb4とコンフリクトします。
|
| db4 |
db4のサポートを有効にするには、
--with-db4[=DIR]を追加します。
注意:
db4はdb2およびdb3とコンフリクトします。
注意:
これは、PHP 5.0.0で追加されました。これ以前のバージョンでは、
--with-db3=DIRを使用し、
DIRにdb4ライブラリのパスを指定する必要する必要があります。
バージョン4.3.0より前のPHPでは、4.1以降のバージョンのdbを使用
することはできません。
|
| cdb |
cdbのサポートを有効にするには、
--with-cdb[=DIR]を追加します。
注意:
PHP 4.3.0以降、付属するcdbライブラリを使用するためにDIRを省略
することができます。この場合、cdb_makeハンドラが追加され、
cdbファイルを作成し、PHPのストリームを用いてネットワーク上の
cdbファイルにアクセスできるようになります。
|
| flatfile |
flatfileのサポートを有効にするには、
--with-flatfileを追加します。
注意:
これは、古いdbm拡張モジュール
との互換性のためにPHP 4.3.0で追加されました。
このハンドラは、他のハンドラで必要とされるライブラリの1つを
インストールすることができない場合、そしれ、付属するcdbハンド
ラを使用することができない場合にのみ使用して下さい。
|
注意:
PHP 4.3.0までは、db2およびdb3ハンドラの両方を追加することができま
したが、内部的に使用できるのは片方だけでした。
これは、両方のファイル形式を使用することができないことを意味します。
PHP 5.0.0以降、このような設定ミスを回避するよう設定の確認が行われます。
この拡張モジュールは設定ディレクティブを全く定義しません。
例 1. DBAの例
<?php
$id = dba_open ("/tmp/test.db", "n", "db2");
if (!$id) { echo "dba_open failed\n"; exit; }
dba_replace ("key", "This is an example!", $id);
if (dba_exists ("key", $id)) { echo dba_fetch ("key", $id); dba_delete ("key", $id); }
dba_close ($id); ?>
|
|
DBAは、バイナリセーフでありいかなる制限も受けません。
DBA は、使用するデータベースの実装による全ての制約を継承します。
全てのファイルベースのデータベースは、完全に使用可能なものについて
新規に作成されたデータベースのファイルモードを設定する手段を、
提供する必要があります。
ファイルモードは、通常 dba_open() または
dba_popen() に4番目の引数として渡されます。
dba_firstkey() および
dba_nextkey()関数を用いて連続的に全てのエント
リにアクセスすることができます。アクセスする際にデータベースを変
更できない可能性があります。
例 2. データベースへの連続アクセス
<?php
# ...データベースをオープンする...
$key = dba_firstkey ($id); while ($key != false) { if (...) { # 他の操作を後で行うためにキーを記憶する $handle_later[] = $key; } $key = dba_nextkey ($id); }
for ($i = 0; $i < count($handle_later); $i++) dba_delete ($handle_later[$i], $id);
?>
|
|