XVII(dbm型の)データベース・アブストラクション レイヤー関数

導入

これらの関数は、Berkeley DB 型データベースへのアクセス用の基本関数を 構成します。

これらの関数は、複数のファイルベースのデータベース用のアブストラクション ・レイヤーです。その機能は、Sleepycat Software's DB2サポートのような近代的なデータベースの機能の サブセットに制限されています。(IBMのソフトウエアDB2と混同しないで 下さい。このデータベースは、ODBC 関数 を通じてサポートされます。)

要件

各機能の動作は、使用するデータベースの実装に依存します。 dba_optimize() および dba_sync() の ような関数は、特定のデータベースでは動作しますが、他のデータベース では機能しません。サポートされるdbaハンドラをダウンロードし、イン ストールする必要があります。

表 1DBAハンドラのリスト

ハンドラ注意
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以降、このような設定ミスを回避するよう設定の確認が行われます。

実行用の設定

この拡張モジュールは設定ディレクティブを全く 定義しません。

リソース型

関数 dba_open() および dba_popen() は、指定したデータベースファイルを アクセスするためのハンドルを返します。このハンドルは、他の全ての dba関数コールで使用されます。

定義済みの定数

この拡張モジュールは定数を全く定義しませ ん。

例 1DBAの例

<?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);

?>

目次
dba_close -- データベースを閉じる
dba_delete -- キーが指すエントリを削除する
dba_exists -- キーが存在するかどうかを確認する
dba_fetch -- キーが指すデータを取得する
dba_firstkey -- 最初のキーを取得する
dba_handlers -- 利用可能なハンドラの一覧を得る
dba_insert -- エントリを挿入する
dba_list -- オープンされているデータベースファイルを全リストを得る
dba_nextkey -- 次のキーを取得する
dba_open -- データベースをオープンする
dba_optimize -- データベースを最適化する
dba_popen -- データベースを持続的にオープンする
dba_replace -- エントリを置換または挿入する
dba_sync -- データベースを同期する