これらの関数は、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 よりも柔軟です。 dbm
固有の制約の多くをまだ有しています(そのため、 推奨されません)。
|
|
gdbm
|
Gdbm は、GNU データベースマネージャ です。
|
|
db2
|
DB2 は、Sleepycat Software's DB2
です。これは、「スタンドアローンおよびクライアント/サーバー
アプリケーションの両方で高性能な組込みデータベースサポートを提供する
プログラム用ツールキット」として記述されています。
|
|
db3
|
DB3 は、Sleepycat Software's DB3 です。
|
|
db4
|
DB4 は、Sleepycat Software's DB4
です。PHP 4.3.2 以降で利用可能です。
|
|
cdb
|
cdb は「固定データベースの作成・読込み用の、高速で高信頼性の
軽量型パッケージ」です。これは qmail の作者によるものであり、 http://cr.yp.to/cdb.html にあります。
固定であるため、読込操作のみがサポートされます。 PHP 4.3.0 以降、内部的な cdb
ライブラリにより(更新ではなく) 書き込みがサポートされています。
|
|
cdb_make
|
PHP 4.3.0 以降、付属する cdb ライブラリを使用する場合に cdb
ファイルの(更新ではなく)作成をサポートします。
|
|
flatfile
|
これは、PHP 4.3.0 以降で利用可能で、古い dbm 拡張モジュールとの互換性の
ためだけのものであり、使用するべきではありません。
しかし、ファイルがこの形式で作成された場所でこれを使用する
ことができます。これは、configure が外部ライブラリを見付ける
ことができない場合に生じます。
|
|
inifile
|
これは PHP 4.3.3 以降で利用可能で、PHP スクリプトから php.ini
ファイルを書き換えられるようにします。ini ファイルを扱う場合は、
array(0=>group,1=>value_name) のような配列、あるいは
"[group]value_name" のような文字列を渡します(group
はオプションです)。 dba_firstkey() や dba_nextkey()
はキーを文字列形式で返しますが、PHP 5 以降で利用できる dba_key_split()
を用いるとそれを配列形式に 変換できます。その際に FALSE を失うこともありません。
|
|
qdbm
|
これは PHP 5.0.0 以降で有効です。qdbm ライブラリは http://qdbm.sourceforge.net にあります。
|
dba_open() または dba_popen()
関数を実行する際、引数にハンドラ名の一つを指定する必要があります。 実際に利用可能なハンドラのリストは、
phpinfo() または dba_handlers() をコールした際に表示されます。
設定オプション --enable-dba=shared
を使用することにより、dbm 形式のデータベースをサポートする動的に ロード可能なモジュールを有効にして
PHP を構築することができます。 また、PHP の configure 行に設定スイッチ
--with-XXXX
を指定することにより、少なくとも以下のハンドラの一つのサポートを 追加する必要があります。
|
警告
|
|
PHP の configuring とコンパイルを済ませたら、コマンドラインから次の
テストを実行する必要があります: php
run-tests.php ext/dba
これは、指定したハンドラの組み合わせが動作するかどうかを調べます。 いちばん問題のあるのは
dbm と ndbm
の組み合わせで、これらは多くの場合何らかの衝突を引き起こします。
その原因は、いくつかのシステムではこれらのライブラリが他のライブラリの
一部となっていることで。configure 時のテストでは個々のハンドラについての
設定不備は調べられますが、それらの組み合わせについてはテストできません。
|
表 2. サポートされるDBAハンドラ
|
ハンドラ
|
configure のスイッチ
|
|
dbm
|
dbm のサポートを有効にするには、 --with-dbm[=DIR] を追加します。
注意: dbm は一般的にはラッパで、しばしば失敗を引き起こします。
その動作をしっかり把握しており、ほんとうにそれを必要とする場合のみ dbm
を使用するようにすべきです。
|
|
ndbm
|
ndbm のサポートを有効にするには、 --with-ndbm[=DIR] を追加します。
注意: ndbm
は一般的にはラッパで、しばしば失敗を引き起こします。
その動作をしっかり把握しており、ほんとうにそれを必要とする場合のみ ndbm
を使用するようにすべきです。
|
|
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 4.3.2
で追加されました。これ以前のバージョンでは、 --with-db3=DIR を使用し、 DIR
に db4 ライブラリのパスを指定する必要する必要があります。 バージョン
4.3.0 より前の PHP では、4.1 以降のバージョンの db
を使用することはできません。また、バージョン 4.1 から 4.1.24 までの
db ライブラリは、どの PHP のバージョンでも利用できません。
|
|
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 で追加されました。
このハンドラは、他のハンドラで必要とされるライブラリをひとつも
インストールすることができない場合、そして、付属する cdb
ハンドラを使用することができない場合にのみ使用してください。
|
|
inifile
|
inifile のサポートを有効にするには、 --with-inifile を追加します。
注意: これは PHP 5.0.0 で追加されました。これにより
Microsoft 形式の .ini ファイル(php.ini のような)を
読み書きできるようになります。
|
|
qdbm
|
qdbm のサポートを有効にするには、 --with-qdbm[=DIR] を追加します。
注意: qdbm は dbm および gdbm
とは同時に使えません。
|
注意: 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_open() または dba_popen() に 4 番目の引数として渡されます。
dba_firstkey() および dba_nextkey() 関数を用いて全てのエントリに
連続的にアクセスすることができます。アクセスする際にデータベースを 変更できない可能性があります。
例 2. データベースへのアクセス
<?php
//
データベースをオープンする
$key = dba_firstkey($id);
while ($key != false) {
if
(true)
{ //
他の操作を後で行うためにキーを記憶する
$handle_later[]
= $key;
}
$key = dba_nextkey($id);
}
foreach ($handle_later as $val) {
dba_delete($val, $id);
}
?>
|
|