これらの関数は、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] を追加します。
|
ndbm |
ndbm のサポートを有効にするには、
--with-ndbm[=DIR] を追加します。
|
gdbm | gdbm のサポートを有効にするには、 --with-gdbm[=DIR] を追加します。 |
db2 |
db2 のサポートを有効にするには、
--with-db2[=DIR] を追加します。
|
db3 |
db3 のサポートを有効にするには、
--with-db3[=DIR] を追加します。
|
db4 |
db4 のサポートを有効にするには、
--with-db4[=DIR] を追加します。
|
cdb |
cdb のサポートを有効にするには、
--with-cdb[=DIR] を追加します。
|
flatfile |
flatfile のサポートを有効にするには、
--with-flatfile を追加します。
|
inifile |
inifile のサポートを有効にするには、
--with-inifile を追加します。
|
qdbm |
qdbm のサポートを有効にするには、
--with-qdbm[=DIR] を追加します。
|
注意: PHP 4.3.0 までは、db2 および db3 ハンドラの両方を追加することが できましたが、内部的に使用できるのは片方だけでした。 これは、両方のファイル形式を使用することができないことを意味します。 PHP 5.0.0 以降、このような設定ミスを回避するよう設定の確認が行われます。
設定ディレクティブは定義されていません。
関数 dba_open() および dba_popen() は、指定したデータベースファイルに アクセスするためのハンドルを返します。このハンドルは、他の全ての dba 関数コールで使用されます。
定数は定義されていません。
DBA はバイナリセーフであり、いかなる制限も受けません。しかし、 使用するデータベースの実装による全ての制約を継承します。
全てのファイルベースのデータベースは、完全に使用可能なものについて 新規に作成されたデータベースのファイルモードを設定する手段を、 提供する必要があります。 ファイルモードは、通常 dba_open() または dba_popen() に 4 番目の引数として渡されます。
dba_firstkey() および dba_nextkey() 関数を用いて全てのエントリに 連続的にアクセスすることができます。アクセスする際にデータベースを 変更できない可能性があります。