XXIV. (dbm 型の)データベース抽象化レイヤ関数
導入
これらの関数は、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() 関数を用いて全てのエントリに 連続的にアクセスすることができます。アクセスする際にデータベースを 変更できない可能性があります。
- 目次
- dba_close -- DBA データベースを閉じる
- dba_delete -- キーが指す DBA エントリを削除する
- dba_exists -- キーが存在するかどうかを確認する
- dba_fetch -- キーが指すデータを取得する
- dba_firstkey -- 最初のキーを取得する
- dba_handlers -- 利用可能なハンドラの一覧を得る
- dba_insert -- エントリを挿入する
- dba_key_split -- 文字列形式のキーを配列形式に分割する
- dba_list -- オープンされている全データベースファイルのリストを得る
- dba_nextkey -- 次のキーを取得する
- dba_open -- データベースをオープンする
- dba_optimize -- データベースを最適化する
- dba_popen -- データベースを持続的にオープンする
- dba_replace -- エントリを置換または挿入する
- dba_sync -- データベースを同期する